增量迁移

    debezium mysql connector的source端,监控mysql数据库的binlog日志,并将数据(DDL和DML操作)以AVRO格式写入到kafka;debezium mysql connector的sink端,从kafka读取AVRO格式数据(DDL和DML操作),并组装为事务,在openGauss端按照事务粒度并行回放,从而完成数据(DDL和DML操作)从mysql在线迁移至openGauss端。由于该方案严格保证事务的顺序性,因此将DDL和DML路由在kafka的一个topic下,且该topic的分区数只能为1(参数num.partitions=1),从而保证source端推送到kafka,和sink端从kafka拉取数据都是严格保序的。

    • 利用sysbench对MySQL进行压测,2路鲲鹏920 CPU、openEuler操作系统下,针对混合IUD场景,10张表50个线程(insert-30线程,update-10线程,delete-10线程),在线迁移性能可达3w tps。
    • 目标数据库的数据是有序的,且保证事务一致性。

    增量迁移gs_replicate依赖MySQL一键式迁移工具gs_rep_portal,可实现增量迁移的安装、启动、停止、卸载整个过程。

    • 下载gs_rep_portal

      解压,并进入portal对应目录

      1. cd portal
    • 修改gs_rep_portal配置文件

      配置文件位于config目录内,增量迁移相关的配置文件主要包含如下两个,相关参数含义简要说明如下:

      • toolspath.properties
      • migrationConfig.properties
      1. # mysql用户名
      2. mysql.user.name=root
      3. # mysql密码
      4. # mysql数据库ip
      5. mysql.database.host=127.0.0.1
      6. # mysql数据库端口
      7. # mysql数据库名称
      8. mysql.database.name=test123
      9. # openGauss用户名
      10. opengauss.user.name=test
      11. # openGauss密码
      12. opengauss.user.password=***
      13. # openGauss数据库ip
      14. opengauss.database.host=127.0.0.1
      15. opengauss.database.port=5432
      16. # openGauss数据库名称
      17. opengauss.database.name=test1234
      18. opengauss.database.schema=test123
      19. # 在线迁移的安装方式,默认为offline,表示离线安装,需通过参数debezium.pkg.path指定离线依赖安装包的路径;若设置为online,对应在线安装,在线下载的安装包将存放在参数debezium.pkg.path指定的路径
      20. default.install.mysql.incremental.migration.tools.way=offline
    • 其中workspace.id表示迁移任务id,取值为数字和小写字母的组合,不同的id区分不同的迁移任务,不同迁移任务可并行启动。若未设置workspace.id,则使用其默认值1。若使用已存在的workspace.id,并修改其中的配置,请在portal/workspace/${workspace.id}/config/路径下修改对应的配置文件。

    • 启动

      1. sh gs_replicate.sh start mysql-opengauss workspace.id
    • 停止

    • 卸载

    上述安装、启动、停止、卸载命令均不会在后台运行,若需在后台运行,请在命令后添加&符号。

    • 当前支持MySQL IUD操作(insert、update、delete)产生的增量数据迁移至openGauss。

    • 为保证事务的顺序和一致性,不支持skip_event, limit_table, skip_table等设置。

    • MySQL需要5.7及以上版本。

    • MySQL参数设置要求为:log_bin=ON, binlog_format=ROW, binlog_row_image=FULL, gtid_mode = ON。若gtid_mode为off,则sink端按照事务顺序串行回放,会降低在线迁移性能。

    • 先进行全量迁移,再进行增量迁移,全量迁移可基于工具完成。

    • Kafka中以AVRO格式存储数据,AVRO字段名称命名规则为:

      • 随后仅包含[A-Za-z0-9_]

      因此,对于MySQL中的标识符命名,包括表名、列名等,需满足上述命名规范,否则在线迁移会报错。