背景:
已经做好了迁移任务并且正常的同步中。。。
新的需求增加几张表到同步任务中
问题:
当数据迁移任务已经处于 Sync 阶段时,在配置文件中增加额外的表并重启任务,DM 并不会为新增的表重新执行全量导出与导入,而是会继续从之前的断点进行增量复制。
解决方案:
采用手动迁移历史数据 + binlog同步的方法
将需要增加的表的历史数据导入到目标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.sqlgpay_agpay.t_agpay_otherpay_order-schema.sql
使用 stop-task 停止已有迁移任务。如果需要增加的表属于另一个运行中的迁移任务,则也将其停止。
登录目标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' ;
在task配置文件中,添加 syncers 部分,并设置 safe-mode: true 以保证可重入执行。
syncers: global:safe-mode: true在迁移表的过滤规则中添加新增的表
- db-name: "gpay_agpay"tbl-name: "t_agpay_otherpay_order"通过 start-task 启动迁移任务。
通过 query-status 观察迁移任务状态,当 syncerBinlog 超过 checkpoint-T 与 checkpoint-S 中的较大值后(本例中,为 (bin.000496,925430273),即可还原 safe-mode 为原始值并重启迁移任务。
点击蓝字
关注我们

运维路书
”
微信号|yunweilushu




