tidb DM 同步,不小心主库 reset master,怎么补救

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.2.2
【复现路径】
【遇到的问题:问题现象及影响】
通过dm 工具进行MySQL – 》 tidb进行增量同步,MySQL(主库)不小心执行了reset master导致同步中断,如何补救?
【资源配置】
【附件:截图/日志/监控】

这个只能重建了吧?因为你binlog日志都空了啊

如果是MySQL —— MySQL 同步可以从库也可以reset master,但是MySQL - 》 tidb不知道怎么解决,而且tidb还同步这其它数据库实例。

#############################################
我dm 从MySQL → tidb 用的全量+增量模式,如果我主库reset master后,我把task 任务改成增量同步行吗?

我看dm task 有如下配置

----------- 实例配置 -----------

mysql-instances:

source-id: "mysql-replica-01"           # 对应 source.toml 中的 `source-id`
meta:                                   # `task-mode` 为 `incremental` 且下游数据库的 `checkpoint` 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 `checkpoint` 为准。如果 `meta` 项和下游数据库的 `checkpoint` 都不存在,则从上游当前最新的 binlog 位置开始迁移
  binlog-name: binlog.000001
  binlog-pos: 4
  binlog-gtid: "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"  # 对于 source 中指定了 `enable-gtid: true` 的增量任务,需要指定该值

应该和mysql一样的效果

我是从两个MySQL实例,两个dm-woker同步数据到tidb,都是通过dm (全量+增量)进行同步,tidb我不能像MySQL(从库)那样进行reset master。我想解决办法,是将现有的dm-task有全量+增量改为增量模式,不知道是否可行?

现在是生产环境不能删除重建,我想到一个方法不知道行不行:
1、将现在同步任务(全量+增量)删除掉,tidb里面的数据库保留
2、重新启动一个增量task,进行增量同步

这样的话,你的数据会乱的吧?因为你reset maste之后,所有binlog日志等于重新开始了,那从哪个binlog开始更新增量呢?根本识别不到断点,就没法增量啊!
可以找一个TIDB数据库里数据的时间点,删除数据后,从那个时间点再重新同步数据吧?不知道这样行不行

我觉得这个思路是靠谱的。

尝试看看

tiup dmctl binlog --help

看看这个里面有没有什么设置binglog位置的方式。

保底的办法可以把任务停掉,然后进dm_meta库,找到对应的{task_name}_syncer_checkpoint表,把里面的的binlog_name,binlog_position,binlog_gtid这三个列的值,指向新的binlog开始的位置。
再resume_task试试看。

我是把dm_meta里面的表删除掉,把dm-task stop掉,重新建的dm-task,里面指定binlog名字和gitid重建建立一个增量任务,现在同步正常了。
你的方法应该也是可以的

1 个赞

应该不会乱,我是同步正常状态下,在master上执行了reset master,这时主从断掉了,再通过dm task指定了,binlog-1 和gitID 1重建建立同步任务

能确保dm追到了mysql reset 前的binlog吗?,会不会存在有些同步还没做的情况?
update 下游dm_meta库里面 <任务名>_sysncer_checkpoint 表记录的binlog_name,binlog_pos ,然后恢复任务任务不知道行不行

master 我reset master了,gitid都变了,dm_meta里面是记录是原来的gitd,这些gitid没用了

重建吧