上游库主键设置自增但是DM报Error 1062: Duplicate entry '52' for key 'PRIMARY'"

如题,上游是rds数据库,版本5.6,已将表id主键设置成自增了

但是仍旧报 Error 1062: Duplicate entry ‘52’ for key ‘PRIMARY’"

是否正常?

算是挺频发的,短时间内发生了两三次,而且这个表是个低频表,一共才54条数据,担心后期数据多了后,会不会频发需要人工介入sql-skip

首先需要了解下你的同步任务是分库分表合并,还是单个表同步到下游;

1.单表同步到下游,发生主键冲突,检查下下游是否存在该数据。

2.分库分表合并场景,报错主键冲突,有可能是 column mapping 设置不合理导致分库的表同步到下游发生主键冲突。

可以检查下 task 任务配置。

单表同步到下游,下游也没有主键冲突,下游不会新增删除数据,而且此列是自增列,几乎可以排除主键冲突问题。但是确实冲突了

主键冲突的时候有在下游确认这一行数据是否存在吗 ?另外,这个表创建时就有自增主键,还是后期修改的呢。辛苦把 DM 版本也提供一下吧。以及 下游 TiDB 版本。

tidb 是3.0.2,dm是latest版本,通过dmctl看是

Release Version: v1.0.0-rc.1-23-gc1ba82a
Git Commit Hash: c1ba82ae85632e01febec91132a1c474a087e78f
Git Branch: master
UTC Build Time: 2019-08-16 14:10:46
Go Version: go version go1.12 linux/amd64

上游库建表就是自增的,下游是全量+增量的,不过这周没再发生

再次发生时,请拿一下以下几个信息。

  1. 确认是否有多个表 table route 到了同一个表
  2. 看下游能否确认这条数据的创建时间、最后更新时间
  3. 去报错位置对应 binlog position 之后的一段 binlog 中找出这条增量同步数据,比较这个 binlog position 和下游 dm_meta 库中这个表的 checkpoint
  4. 找出报错前几十分钟的 DM-worker log

好的。下次发生时,留意一下