前言
首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《MySQL迁移至YashanDB实际体验记录》(作者:叶季安),满满干货,不要错过!
📣号外!新的征文活动已开启,文末点击“阅读原文”或戳一戳下方图片👇即可跳转活动链接,最高可获千元大奖!🤩
YashanDB官方推出了23.2新版本的数据库和配套的迁移平台Yashan Migration Platform,在感受新版本数据库的同时,也拿了一个真实的小系统来测试一下迁移平台的能力,在这里记录一下迁移平台安装、使用的过程和遇见的问题。服务器准备
根据官方文档,个人版数据库和迁移平台都采用各自的最小硬件资源要求进行部署,如下表格所示:
-
个人版数据库硬件配置
-
迁移平台硬件配置
迁移环境准备
-
目标端个人版数据库安装
根据官方文档安装新版本的个人版YashanDB
创建yashan用户并加入YASDBA用户组:
useradd -d home/yashan1 -m yashan1
passwd yashan1
groupadd YASDBA
usermod -a -G YASDBA yashan1
解压并安装YashanDB:
su - yashan1
cd install
tar -xf yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
解压后的文件夹结构和23.1个人版的YashanDB基本一致
生成配置文件:
./bin/yasboot package se gen --cluster yashandb -u yashan1 -p 123456 --ip 192.168.33.106 --port 22 --install-path home/yashan1/yasdb_home --data-path home/yashan1/yasdb_data --begin-port 1688
安装软件包:
./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
部署数据库:
./bin/yasboot cluster deploy -t yashandb.toml
这个时候数据库就安装好了。
修改好系统用户密码后按照官方文档配置环境变量:
./bin/yasboot cluster password set -n yasdb_123 -c yashandb
cd ~/yasdb_home/yashandb/23.2.1.100/conf/
cat yashandb.bashrc >> ~/.bashrc
source ~/.bashrc
最后看一下数据库状态:
[yashan1@localhost ~]$ yasboot cluster status -c yashandb -d
hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path
---------------------------------------------------------------------------------------------------------------------------------------------------
host0001 | db | 1-1:1 | 10700 | open | normal | primary | 192.168.33.106:1688 | home/yashan1/yasdb_data/db-1-1
----------+-----------+--------+-------+-----------------+-----------------+---------------+---------------------+---------------------------------
- 源端数据库准备
源端数据库是公司内部的一个MySQL小系统库,MySQL的版本是8.0.35,分为中英文两个库,截图已做简单的脱敏处理。
查看一下源端库大概的表数量和行数:
select count(*) from tables where TABLE_SCHEMA = 'test_ymp_cn';
select table_name,table_rows from tables where TABLE_SCHEMA = 'test_ymp_cn' order by table_rows desc;
共有149张表、4个视图,整体数据量较少,英文库也差不多是这个数量级。
最后再看下整体的数据类型分布情况:
select DATA_TYPE,max(CHARACTER_MAXIMUM_LENGTH),max(CHARACTER_OCTET_LENGTH),count(1) as quantity from information_schema.COLUMNS where TABLE_SCHEMA in ('test_ymp_cn') group by DATA_TYPE order by quantity desc;
可以看到基本都是常规类型。
根据YMP的文档,创建专用的迁移用户并赋权。
create user test_ymp identified by '123456';
GRANT SELECT, PROCESS, SHOW VIEW, SHOW DATABASES, TRIGGER, SHOW_ROUTINE ON *.* TO 'test_ymp'@'%';
flush privileges;
然后检查一下test_ymp用户是不是正确被赋权了。
这样环境就准备完成了。
迁移平台安装
准备好了基础的环境,现在终于可以开始安装迁移平台了。
根据官方文档要求,创建ymp专用的用户:
useradd -d home/ymp -m ymp
passwd ymp
准备java环境,这台机器的java是提前安装好的,这里就不额外准备了,检查一下java的版本:
检查libaio环境,centos系统应该默认有安装:
因为这次迁移是MySQL到yashandb,应该用不上OCI,所以OCI就不准备了。
最后是软件包准备,把YMP和YashanDB的安装包都上传到服务器。
接下来开始准备安装迁移平台:
unzip yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip
会在同级生成一个名为yashan-migrate-platform的文件夹,大致结构如下。
YMP的配置参数都采用默认参数,不进行调整。由于不需要OCI,所以采用内置库+不启动OCI的方式安装部署YMP。
看到YMP started successfully!的字样,说明YMP部署且启动成功了。
看一下YMP的状态:
sh bin/ymp.sh status
sh bin/ymp.sh -v
现在这样就完成了YMP的安装。
迁移操作
完成部署后,就可以用浏览器,通过部署机器ip:8090的方式访问迁移平台的页面。默认的用户名和密码是admin/admin,初次登录需要修改密码。
登录进去后的界面如下:
-
创建任务
直接点击右上角的创建任务。
输入任务名称,迁移步骤保持默认全勾选。
在源端数据库和目标端数据库的右侧点击添加数据库,填写一系列连接数据库所需的
常规信息,点击测试连接:
把所有信息都填写完成后,界面如图所示,点击下一步继续配置。
-
迁移评估
第一个界面是评估配置,这里会显示迁移任务的部分基础信息。 在选择评估对象处选择全选,让YMP把数据库里所有东西都一起迁移过去。
评估范围则选择要迁移的两个database:test_ymp_cn和test_ymp_en。
最下面的高级选项保持默认。
然后点击下一步开始迁移评估。
YMP会开始进行迁移评估,稍微等待一段时间后,会出现评估报告
可以看到,表、约束、索引和视图都有不兼容的项。
这也是在预料之中的,毕竟MySQL和YashanDB的异构程度本来就很高。
点到对象详情那边,筛选出不兼容的项,看看到底是怎么回事儿。
可以看到不兼容的信息,根据实际业务情况决定要不要调整SQL,我这里遇见的情况是MySQL端的一个默认值无法插入到YashanDB的数据库中,所以修改了默认值。
修改完成后点击验证并保存,看到上方评估结果变成创建成功后就可以关掉弹出框。
视图方面的不兼容信息,则是MySQL表的`符号没有被正确转义过来,这里也是手动修改,去掉`号就好了。
剩下的索引和约束不兼容,大部分是因为MySQL可以在同一列上创建多个索引,但是YashanDB不允许这样操作导致的。检查完剩下的索引和约束都是这种报错后,全部选中并点击批量忽略。
最后回到页面上面,点击刷新报告,看下当前的兼容率。
现在终于兼容程度100%了!可以进入迁移了!
- 数据迁移
在数据迁移界面,所有的参数都保持默认,直接选择开始离线迁移。
点击开始迁移后,会弹出一个字符集不兼容的告警,不管他,直接开始迁移。
然后会顺利进到离线迁移界面,等着就行了。
迁移完成后,发现我这里元数据迁移有大概1/4都是失败的,点开迁移的详情看下报错。
然后发现这个报错,好像,看不懂…而且目标端的DDL在数据库又是可以实际执行成功的,而且用ymp点击重试也不能修复,尴尬了。
研究了老半天,在数据库的官方文档里找到个建立索引的并行度 PARALLEL,其中这个参数的范围是[1,CPU核数*2]。
由于我目标端数据库服务器的核数是2,所以报错number of PARALLEL must be between 1 and 4是合理的。那看来可能是YMP在哪个地方把这个并发度写死了。
又回去翻YMP的官方文档,终于在安装这一章节的配置文件这里,找到migration.parallel.index这个参数。
YMP默认将它设成5,导致超过了我的服务器所能支持的4个并发,引发报错。
找到原因就好处理了,直接改掉YMP的配置文件,重启YMP!
sh bin/ymp.sh stop
sh bin/ymp.sh start
按照原路径进入刚刚的界面,直接点击迁移重试。
这下大部分的元数据都终于迁移过来了,但是仔细一看还是有极少量的失败。
研究一下这个报错,说目标端表中有违反主键非空的数据存在。
考虑到MySQL可以存在空字符串,而YashanDB则会将空字符串处理为null,出现这个报错是合理的。检查了下这张业务表,这个空字符串不能改,所以YashanDB这边只能放弃创建这个主键约束了。
-
迁移校验
最后再试下迁移校验的能力。
目前支持完整比对和统计比对,这里让参数保持默认,试下完整比对的能力。
等待一段时间后会输出校验报告。
可以看到有2张表因为空字符串问题导致不匹配,有135张表因为是无主键表所以跳过了,其他的表都是一致的。
总结
YashanDB的迁移平台整体使用体验还是相当不错的,界面可读性和操作性都挺高,各种数据也很清晰,特别是在MySQL到YashanDB这种异构程度比较高的数据库迁移场景下也能保持比较高的兼容性,可以说是极大地减轻了数据迁移过程中手动修改SQL的消耗。但也有不少小的细节可以提升的,比如我遇见的这个并发度问题,建议YMP的配置文件可以在这个项上直接置空,让数据库自动去判断最优的并发度。另外迁移平台现在也只提供离线迁移的能力,对于小系统和可以停机的系统来说现在基本够用。听YashanDB官方的讲座有提到在线迁移能力目前在规划中了,希望迁移平台新版本可以早日发布,期待可以早日使用上YashanDB的在线迁移能力。
相关阅读