在同步Relay Log时经常出现”Duplicate entry“错误

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

  • 【TiDB 版本】:TiDB 3.0.5 / DM 1.0.2
  • 【问题描述】: Task类型是ALL,没有其他同步操作,全量同步完成以后,在同步Relay Log时经常出现”Duplicate entry“错误,可以通过resume-task恢复。 问题:
  1. 正常同步,为何会有主键冲突?
  2. MySQL很多默认的主键名称都是“PRIMARY”,在数据库多达400张表的情况下,根本不能定位到什么表有问题

??? 按照描述是 sync 增量同步阶段发现主键冲突吗 ? 全量同步后,task-mode 有修改成 incremental 吗?是从哪个位点开始增量同步的?

应该要从全量的位点开始进行增量同步,如果增量同步位点设置的太早,会重复导入数据,导致主键冲突。

Sorry,我用的是ALL模式

最困扰我的是第二个问题,没法定位到底是哪个表冲突了

ALL 模式下增量同步报主键冲突吗 ? 是简单的单表同步还是分库分表合并的场景呢 ?

第二个问题,可以看下日志,日志中有详细记录的。

可以检查下下游已经存在的数据和当前插入的 sql 是否完全一致,如果一致,增量同步阶段可以打开 safe-mode,insert 会转成 replace into 插入。如果不一致,说明上游可能存在冲突的 主键 ID,需要查到并解决。

单表同步

先按照上面的建议检查下吧。辛苦