TiCDC 同步报重复键,查不到具体是哪张表的数据

TiCDC 运行过程中,报重复键:

去查看 TiCDC的 error log:

想去手工处理下游重复的数据,但并没有看到是哪张表的数据。

如果知道是哪张表,删除数据后,再开启任务是不是就可以了?

1 个赞

方便上传下报错前后的ticdc日志吗?(大概10分钟) 多谢。

cdc.rar (181.8 KB)

cdc_stderr.log (971.7 KB)

谢谢大佬!

您能试试 curl http://{TiDBIP}:10080/regions/53585 看看是哪张表,是否是这个值,多谢。

找到表了,TiDB 里有 id=11483752 这条数据,但是下游 MySQL 没有这条数据。为什么还会报 Duplicate entry?

  1. 麻烦问下,上游 tidb 版本和 ticdc 版本是什么?
  2. 下游 mysql 版本是什么?
  1. tidb 是 v5.0.0.0 , ticdc 也是 v5.0.0.0,是通过 tiup 部署的。
  2. 下游 mysql 是 5.7.25-log 版本。

抱歉,还是没有分析结果,有进展会尽快同步,多谢。

好的,麻烦了。

我这边暂时新建了 changefeed ,跳过这个数据,继续同步,再看看还会不会遇到这种问题。

刚看了眼,又出现重复键的问题了。

报错:

cdc.log:

curl查看表:

下游MYSQL:

这次下游有数据了,但是这条数据明显是新插入的,和TiDB的数据一致。明明同步过去了,怎么还报重复键

因为我们需要拿到源库的sql,所以创建的时候设置了 safe-mode=false,试了几次安全模式下是没问题的。

关了安全模式,就会随机地报重复键问题,而且报错后去校验数据,发现上游tidb和下游mysql表里数据都一致的。

抱歉,答复的比较晚。

  1. 目前 TiCDC 再数据重入上有些问题,在网络不稳定或者 ticdc 频繁重启的时候可能会发生这类错误。该错误表明下游已存在相同的记录,解决方法,推荐关闭 old value
    (1) 将 changefeed 配置文件中 enable-old-value 的值设为 false
    (2) cdc cli changefeed update 更新配置文件
  2. 如果不修改的话,遇到问题可以参考文档
    https://docs.pingcap.com/zh/tidb/stable/troubleshoot-ticdc#ticdc-同步时在下游执行-ddl-语句失败会有什么表现如何恢复

感谢回复!

目前因为下游业务需要,只能使用 old value 模式。官方未来对于 cdc 数据重入的问题有优化计划吗?

有确定的计划后,我再更新

好的,谢谢!

image

今天的情况是 ticdc 没有重启,网络也比较稳定:

另外查了下 gc_safe 的时间:

这个时间正好是 ticdc 中断的时间,不确定这个重复键问题和gc有没有关系

麻烦帮忙反馈下 tiup cluster display 的信息。
请问 ticdc 是单独部署在一个服务器吗?

部署信息:
image

都是混合部署的

能麻烦帮忙确认下,服务器整体 message 日志 或者 dmesg 有报错吗? 其他同服务器的节点有重启或者报错吗?在这个时间点。

message日志 无报错 :

demesg日志无报错:
image

其他服务器的 message 及 demesg 也均正常。

节点信息,所有节点在 6月22日 22:09 这个时间都没有重启过:

cdc状态:

cdc日志除了重复键报错,没有其他error