暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB DM同步任务运行中,新增同步表如何操作?

运维路书 2022-04-21
51

背景:

已经做好了迁移任务并且正常的同步中。。。

新的需求增加几张表到同步任务中



问题:

    当数据迁移任务已经处于 Sync 阶段时,在配置文件中增加额外的表并重启任务,DM 并不会为新增的表重新执行全量导出与导入,而是会继续从之前的断点进行增量复制。


解决方案:

    采用手动迁移历史数据 + binlog同步的方法


1

导入历史数据


        将需要增加的表的历史数据导入到目标tidb中,可以直接使用mysqldump 或者 dumpling工具,如果需要对表中的数据过滤操作,可以选择dumpling


    tiup dumpling -urpl -P 3310 -h 10.156.44.112 -p -o ./112_dump/ -B gpay_agpay -T gpay_agpay.t_agpay_otherpay_order --where "createtime >='2022-01-01 00:00:00.000000'"


             metadata 文件中存储了 导出时的binlog文件名和偏移量。将两个sql文件导入目标tidb中,分别是建表sql和历史数据sql。本例中为:


      gpay_agpay.t_agpay_otherpay_order.000000000.sql
      gpay_agpay.t_agpay_otherpay_order-schema.sql



      2

      停止同步任务


              使用 stop-task 停止已有迁移任务。如果需要增加的表属于另一个运行中的迁移任务,则也将其停止。


      3

      修改同步checkpoint


      • 登录目标tidb库的元数据信息库(dm_meta)

      • 查看 *_syncer_checkpoint 表


        记录binlog_name和binlog_pos值为checkpoint-T (bin.000496,925430273)

        • >select * from `mysql-112_syncer_checkpoint` where is_global=1\G*************************** 1. row ***************************                   id: mysql1b            cp_schema:              cp_table:           binlog_name: bin.000496           binlog_pos: 925430273
        • 查看dumpling导出的数据文件中的 metadata 文件


          记录Log和Pos值为checkpoint-S (bin.000496, 923314840)

          • $ cat metadata Started dump at: 2022-04-20 17:18:42SHOW MASTER STATUS:        Log: bin.000496        Pos: 923314840        GTID:716b5f9b-644d-11ea-8967-b4055d0b48c2:1-272
          • 连接目标 TiDB 数据库dm_meta,手动更新已有迁移任务对应的*_syncer_checkpoint 表中的binlog_name和binlog_pos为 checkpoint-T 与 checkpoint-S 中的较小值


            • update `mysql-112_syncer_checkpoint` set binlog_pos=923314840,binlog_name='bin.000496' where is_global=1 and id='mysql1b' ;


            4

            修改task配置文件


            • 在task配置文件中,添加 syncers 部分,并设置 safe-mode: true 以保证可重入执行。


              • syncers:  global:
                safe-mode: true
              • 在迁移表的过滤规则中添加新增的表

                • - db-name: "gpay_agpay"
                  tbl-name: "t_agpay_otherpay_order"
                • 通过 start-task 启动迁移任务。


                5

                检查任务状态


                    通过 query-status 观察迁移任务状态,当 syncerBinlog 超过 checkpoint-T 与 checkpoint-S 中的较大值后(本例中,为 (bin.000496,925430273),即可还原 safe-mode 为原始值并重启迁移任务。




                点击蓝字

                关注我们


                运维路书

                微信号|yunweilushu



                文章转载自运维路书,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论