MySQL迁移至YashanDB实际体验记录

2024年 7月 29日 39.6k 0

前言

首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《MySQL迁移至YashanDB实际体验记录》(作者:叶季安),满满干货,不要错过!

📣号外!新的征文活动已开启,文末点击“阅读原文”或戳一戳下方图片👇即可跳转活动链接,最高可获千元大奖!🤩

MySQL迁移至YashanDB实际体验记录-1

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

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

  • 个人版数据库硬件配置

MySQL迁移至YashanDB实际体验记录-2

  • 迁移平台硬件配置

MySQL迁移至YashanDB实际体验记录-3

迁移环境准备

  • 目标端个人版数据库安装

根据官方文档安装新版本的个人版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,分为中英文两个库,截图已做简单的脱敏处理。
    MySQL迁移至YashanDB实际体验记录-4

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

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

      MySQL迁移至YashanDB实际体验记录-5

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

        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;

        MySQL迁移至YashanDB实际体验记录-6

        可以看到基本都是常规类型。

        根据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用户是不是正确被赋权了。

          MySQL迁移至YashanDB实际体验记录-7这样环境就准备完成了。

          迁移平台安装

          准备好了基础的环境,现在终于可以开始安装迁移平台了。

          根据官方文档要求,创建ymp专用的用户:

            useradd -d home/ymp -m ymp
            passwd ymp

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

            MySQL迁移至YashanDB实际体验记录-8

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

            MySQL迁移至YashanDB实际体验记录-9

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

            最后是软件包准备,把YMP和YashanDB的安装包都上传到服务器。
            MySQL迁移至YashanDB实际体验记录-10

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

              unzip yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip

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

              MySQL迁移至YashanDB实际体验记录-11

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

              MySQL迁移至YashanDB实际体验记录-12 看到YMP started successfully!的字样,说明YMP部署且启动成功了。

              看一下YMP的状态:

                sh bin/ymp.sh status
                sh bin/ymp.sh -v

                MySQL迁移至YashanDB实际体验记录-13 现在这样就完成了YMP的安装。

                迁移操作

                完成部署后,就可以用浏览器,通过部署机器ip:8090的方式访问迁移平台的页面。默认的用户名和密码是admin/admin,初次登录需要修改密码。
                登录进去后的界面如下:
                MySQL迁移至YashanDB实际体验记录-14

                • 创建任务

                直接点击右上角的创建任务。
                MySQL迁移至YashanDB实际体验记录-15

                输入任务名称,迁移步骤保持默认全勾选。

                在源端数据库和目标端数据库的右侧点击添加数据库,填写一系列连接数据库所需的

                常规信息,点击测试连接:

                MySQL迁移至YashanDB实际体验记录-16
                MySQL迁移至YashanDB实际体验记录-17

                把所有信息都填写完成后,界面如图所示,点击下一步继续配置。

                MySQL迁移至YashanDB实际体验记录-18

                • 迁移评估

                第一个界面是评估配置,这里会显示迁移任务的部分基础信息。 在选择评估对象处选择全选,让YMP把数据库里所有东西都一起迁移过去。 

                评估范围则选择要迁移的两个database:test_ymp_cn和test_ymp_en。
                MySQL迁移至YashanDB实际体验记录-19 最下面的高级选项保持默认。

                然后点击下一步开始迁移评估。

                YMP会开始进行迁移评估,稍微等待一段时间后,会出现评估报告
                MySQL迁移至YashanDB实际体验记录-20
                MySQL迁移至YashanDB实际体验记录-21

                可以看到,表、约束、索引和视图都有不兼容的项。

                这也是在预料之中的,毕竟MySQL和YashanDB的异构程度本来就很高。

                点到对象详情那边,筛选出不兼容的项,看看到底是怎么回事儿。

                MySQL迁移至YashanDB实际体验记录-22

                可以看到不兼容的信息,根据实际业务情况决定要不要调整SQL,我这里遇见的情况是MySQL端的一个默认值无法插入到YashanDB的数据库中,所以修改了默认值。
                MySQL迁移至YashanDB实际体验记录-23

                修改完成后点击验证并保存,看到上方评估结果变成创建成功后就可以关掉弹出框。

                视图方面的不兼容信息,则是MySQL表的`符号没有被正确转义过来,这里也是手动修改,去掉`号就好了。

                MySQL迁移至YashanDB实际体验记录-24

                剩下的索引和约束不兼容,大部分是因为MySQL可以在同一列上创建多个索引,但是YashanDB不允许这样操作导致的。检查完剩下的索引和约束都是这种报错后,全部选中并点击批量忽略。

                MySQL迁移至YashanDB实际体验记录-25

                最后回到页面上面,点击刷新报告,看下当前的兼容率。
                MySQL迁移至YashanDB实际体验记录-26

                MySQL迁移至YashanDB实际体验记录-27

                现在终于兼容程度100%了!可以进入迁移了!

                • 数据迁移

                在数据迁移界面,所有的参数都保持默认,直接选择开始离线迁移。

                点击开始迁移后,会弹出一个字符集不兼容的告警,不管他,直接开始迁移。
                MySQL迁移至YashanDB实际体验记录-28

                然后会顺利进到离线迁移界面,等着就行了。

                MySQL迁移至YashanDB实际体验记录-29
                迁移完成后,发现我这里元数据迁移有大概1/4都是失败的,点开迁移的详情看下报错。
                MySQL迁移至YashanDB实际体验记录-30

                然后发现这个报错,好像,看不懂…而且目标端的DDL在数据库又是可以实际执行成功的,而且用ymp点击重试也不能修复,尴尬了。

                MySQL迁移至YashanDB实际体验记录-31

                研究了老半天,在数据库的官方文档里找到个建立索引的并行度 PARALLEL,其中这个参数的范围是[1,CPU核数*2]。

                MySQL迁移至YashanDB实际体验记录-32
                由于我目标端数据库服务器的核数是2,所以报错number of PARALLEL must be between 1 and 4是合理的。那看来可能是YMP在哪个地方把这个并发度写死了。

                又回去翻YMP的官方文档,终于在安装这一章节的配置文件这里,找到migration.parallel.index这个参数。

                YMP默认将它设成5,导致超过了我的服务器所能支持的4个并发,引发报错。
                MySQL迁移至YashanDB实际体验记录-33

                找到原因就好处理了,直接改掉YMP的配置文件,重启YMP!
                MySQL迁移至YashanDB实际体验记录-34

                  sh bin/ymp.sh stop
                  sh bin/ymp.sh start

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

                  MySQL迁移至YashanDB实际体验记录-35

                  这下大部分的元数据都终于迁移过来了,但是仔细一看还是有极少量的失败。

                  MySQL迁移至YashanDB实际体验记录-36
                  MySQL迁移至YashanDB实际体验记录-37

                  研究一下这个报错,说目标端表中有违反主键非空的数据存在。

                  考虑到MySQL可以存在空字符串,而YashanDB则会将空字符串处理为null,出现这个报错是合理的。检查了下这张业务表,这个空字符串不能改,所以YashanDB这边只能放弃创建这个主键约束了。

                  • 迁移校验

                  最后再试下迁移校验的能力。

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

                  总结

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

                  相关阅读

                  MySQL迁移至YashanDB实际体验记录-40MySQL迁移至YashanDB实际体验记录-41MySQL迁移至YashanDB实际体验记录-42

                  相关文章

                  Oracle如何使用授予和撤销权限的语法和示例
                  Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
                  下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
                  社区版oceanbase安装
                  Oracle 导出CSV工具-sqluldr2
                  ETL数据集成丨快速将MySQL数据迁移至Doris数据库

                  发布评论