DM同步分库分表如何跳过错误的DDL

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.6
  • 【问题描述】:分库分表合并时,某个worker报错,导致现在一直停在一个上游binlog已经不存在的位点,手动修改relay_log的位置,重启worker也无效,怎么从最新的位点开始拉取数据呢?

“masterBinlog”: “(mysql-bin.000124, 442668595)”, “masterBinlogGtid”: “21316b0b-89e2-11ea-8f46-f8f21e6bbba0:1-57,d44b8399-89e1-11ea-8548-f8f21e6bba60:1-173820877”, “syncerBinlog”: “(mysql-bin|000001.000036, 745662553)”,

如何修改syncerBinlog的位点,因为上游的MySQL删除了对应的binlog,我修改了tidb中的tidb_meta中的shard_mycore_syncer_checkpoint表也没有效果

您好,可以参考文档尝试跳过
https://pingcap.com/docs-cn/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements/

我使用下面的命令跳过了,但是也没有效果,我想用上游最新的binlog进行同步(“masterBinlog”: “(mysql-bin.000124, 442668595)”),而sync卡在"syncerBinlog": “(mysql-bin|000001.000036, 745662553)”,,应该怎么做呢?

sql-skip -w “21...*:8264” --binlog-pos=“mysql-bin|000001.000036:745662553” shard_mycore

你好,

并不建议这样操作,如果跳过中间大量数据,未来数据同步还是一样会出错,如果已经删除上游 mysql 的 binlog 文件,并且没有其他 slave 可以切换,可以考虑拉去全量数据库重新同步

对,标准的做法肯定这样不好,但是我是指定表同步的,如果我现在想要指定位点开始同步,有什么办法可以吗?我直接修改tidb_meta和relay_log中间的relay_meta都不行呢

你好,

丢掉中间数据的做法是不推荐的,对于目前情况,可以进行一下尝试,并注意顺序,可以关注下是否开启了 gtid 复制。否则对应修改 gtid 点即可

  1. stop dm-worker
  2. 修改relay_log 中 relay meta 文件
  3. start dm-worker

你是说上游是否开启GTID还是TIDB要开启GTID?我之前就按照你说的步骤做过,我是修改了relay.meta 这个文件,但是重启后还是会去找之前那个报错的binlog binlog-name = “mysql-bin.000124” binlog-pos = 442668595 binlog-gtid = “21316b0b-89e2-11ea-8f46-f8f21e6bbba0:1-57,d44b8399-89e1-11ea-8548-f8f21e6bba60:1-173820877”

对于上游 binlog 已经被删除,数据不完整,建议重新同步吧

https://pingcap.com/docs-cn/tidb-data-migration/stable/faq/

这个重新同步问题到不大,我想验证下功能,TIDB 能否像MySQL 复制一样,如果遇到了问题,我可以指定从某个位置接着同步,但是TIDB我这样修改relay.meta 好像并不行,一直报错卡在那个不存在的binlog上,怎么也跳不过去

您好,relay.meta 里面的位点指的是从哪个位点开始拉取上游的 binlog,同步过程中遇到报错,是指把 relay log 的 event 在下游执行时报错,所以修改 relay.meta 是无效的。复制一般情况下遇到问题大概率是下游 tidb 不支持,所以可以使用 sql-skip 跳过,或者在 task 配置中修改 binlog filter 提前过滤掉。如果是想指定从某个位置开始同步,可以修改 checkpoint 信息(不推荐修改,修改错误后出现可能会出现数据丢失的情况)
https://docs.pingcap.com/zh/tidb-data-migration/v1.0/error-handling#relay-处理单元报错-event-from--in--diff-from-passed-in-event--或同步任务中断并包含-get-binlog-error-error-1236-hy000、binlog-checksum-mismatch-data-may-be-corrupted-等-binlog-获取或解析失败错误