dm 增量过程中出现重复key,已经持续2周,

dm版本:v5.3.0
tidb各组件版本:v5.0.6
背景:
2周前从5.0.3升级到5.0.5,因kv oom的问题再升级到5.0.6,之后dm同步就出现重复key了,确认过上游没有重复数据,数据源都是一对一,
使用5.0.3时没有出现该问题,查询论坛帖子有看到tidb重试导致主键冲突, 启动后5分钟会开启safe_mode,据观察,resume后1分钟内就会出现重复key的异常,

报错日志:
[2022/01/13 07:34:59.396 +08:00] [ERROR] [subtask.go:336] [“unit process error”] [subtask=mysql] [unit=Sync] [“error information”="ErrCode:10006 ErrClass:“database” ErrScope:“not-set” ErrLevel:“hig
h” Message:“startLocation: [position: (, 0), gtid-set: ], endLocation: [position: (mysql-bin.000148, 120415934), gtid-set: ]: execute statement failed: commit” RawCause:“Error 1062: Duplicate entry ‘4616
294’ for key ‘PRIMARY’” "]

1赞

从 2.0.4 开始,减小增量任务重启时 safe mode 的时间到 1 分钟了。
https://docs.pingcap.com/zh/tidb-data-migration/v2.0/2.0.4

另外可以参考 常见问题排查之 -- DM 主键冲突的原因及排查思路 排查下。

1赞

根据文档排查过 ,目前是属于这个阶段
这个问题在每天2-3点数据量比较大的时候会出现,这个时间有办法修改吗?
image

1赞

麻烦检查下在数据源配置中是否启用了 GTID(enable-gtid: true),且 DM worker sync 单元在读取 GTID 中间的 binlog 事件时遇到了 “connection refuse” 以外的错误。如果是的话可能是触发了 DM v5.3.0 中的一个 bug ,详见:https://github.com/pingcap/tiflow/issues/3711 ,预计会在 v5.3.1 中修复,临时解决方法:

  1. 在场景允许时使用 binlog position 同步(enable-gtid: false);或
  2. 开启 relay log
1赞

我这里多个数据源 有启用了GTID的 也有没有启用的, 都会出现这样的问题。
只是这个问题在升级到tidb5.0.6后出现。

1赞

1.如果条件允许可以先按照上面提到的两种方法调整下,如果依然有问题那基本可以排除是这个 bug 导致的;
2.排除是 bug 原因后,可以按照 2 楼提供的思路再排查下。

1赞

show status的结果发下
是update报错,还是insert报错呢?

1赞

全量同步时候出现的?把下游的表删了重新同步。。。。

1赞

蛋疼了, 下午开启relay log以后 同步就直接跪了,一直提示execute statement failed , 下游tidb里面找到[“batchRecvLoop re-create streaming fail”] [target=10.10.10.96:20160] [forwardedHost=] [error=“context deadline exceeded”]
感觉是语句执行不过去, 但是过一会重试他又能执行了,,,就是反复得重启执行, 这个要咋整?

1赞

上面得环境是 tidb在idc dm部署在别得地域, 遇到执行时间长或者超大得sql语句就会出现context deadline exceeded,尝试调整过net_write_timeout 没用
最后解决方案是把dm 移回去,从内网写入, 问题解决。
个人感觉,面对这样有跨地域同步数据得情况,可能是我参数不会调,感觉很是费劲。