「YashanDB迁移体验官」Mysql迁移至YashanDB实际体验记录

近期YashanDB官方推出了23.2新版本的数据库和配套的迁移平台Yashan Migration Platform,在感受新版本数据库的同时,也拿了一个真实的小系统来测试一下迁移平台的能力,在这里记录一下迁移平台安装、使用的过程和遇见的问题。

服务器准备

根据官方文档,个人版数据库和迁移平台都采用各自的最小硬件资源要求进行部署,如下表格所示:

个人版数据库硬件配置
项目 配置
操作系统 CentOS Linux release 7.9.2009 (Core)
CPU架构 x86_64
CPU核数 2
内存 8G
磁盘 SSD 500G
迁移平台硬件配置
项目 配置
操作系统 CentOS Linux release 7.9.2009 (Core)
CPU架构 x86_64
CPU核数 4
内存 8G
磁盘 SSD 500G

迁移环境准备

目标端个人版数据库安装

根据官方文档安装新版本的个人版YashanDB

shell 复制代码
创建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,分为中英文两个库,截图已做简单的脱敏处理。

查看一下源端库大概的表数量和行数:

sql 复制代码
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个视图,整体数据量较少,英文库也差不多是这个数量级。

最后再看下整体的数据类型分布情况:

sql 复制代码
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的文档,创建专用的迁移用户并赋权。

sql 复制代码
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专用的用户:

shell 复制代码
useradd -d /home/ymp -m ymp
passwd ymp

准备java环境,这台机器的java是提前安装好的,这里就不额外准备了,检查一下java的版本:

检查libaio环境,centos系统应该默认有安装:

因为这次迁移是mysql到yashandb,应该用不上OCI,所以OCI就不准备了。

最后是软件包准备,把YMP和YashanDB的安装包都上传到服务器。

接下来开始准备安装迁移平台:

shell 复制代码
unzip yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip

会在同级生成一个名为yashan-migrate-platform的文件夹,大致结构如下。

YMP的配置参数都采用默认参数,不进行调整。 由于不需要OCI,所以采用内置库+不启动OCI的方式安装部署YMP。

shell 复制代码
 sh bin/ymp.sh install --db /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz

看到YMP started successfully!的字样,说明YMP部署且启动成功了。

看一下YMP的状态:

shell 复制代码
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!

shell 复制代码
sh bin/ymp.sh stop
sh bin/ymp.sh start

按照原路径进入刚刚的界面,直接点击迁移重试。

这下大部分的元数据都终于迁移过来了,但是仔细一看还是有极少量的失败。 研究一下这个报错,说目标端表中有违反主键非空的数据存在。 考虑到Mysql可以存在空字符串,而YashanDB则会将空字符串处理为null,出现这个报错是合理的。 检查了下这张业务表,这个空字符串不能改,所以YashanDB这边只能放弃创建这个主键约束了。

迁移校验

最后再试下迁移校验的能力。 目前支持完整比对和统计比对,这里让参数保持默认,试下完整比对的能力。 等待一段时间后会输出校验报告。 可以看到有2张表因为空字符串问题导致不匹配,有135张表因为是无主键表所以跳过了,其他的表都是一致的。

总结

YashanDB的迁移平台整体使用体验还是相当不错的,界面可读性和操作性都挺高,各种数据也很清晰,特别是在Mysql到YashanDB这种异构程度比较高的数据库迁移场景下也能保持比较高的兼容性,可以说是极大地减轻了数据迁移过程中手动修改SQL的消耗。 但也有不少小的细节可以提升的,比如我遇见的这个并发度问题,建议YMP的配置文件可以在这个项上直接置空,让数据库自动去判断最优的并发度。 另外迁移平台现在也只提供离线迁移的能力,对于小系统和可以停机的系统来说现在基本够用。听YashanDB官方的讲座有提到在线迁移能力目前在规划中了,希望迁移平台新版本可以早日发布,期待可以早日使用上YashanDB的在线迁移能力。

相关推荐
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
远歌已逝5 小时前
管理Oracle实例(二)
数据库·oracle
日月星宿~5 小时前
【MySQL】summary
数据库·mysql
爱吃土豆的程序员5 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
睿思达DBA_WGX5 小时前
Oracle 11g rac 集群节点的修复过程
数据库·oracle
尘浮生5 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
Leo.yuan6 小时前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
Runing_WoNiu6 小时前
MySQL与Oracle对比及区别
数据库·mysql·oracle