Ticdc主备集群模式,有个别表的数据一直不能完全同步,手动执行了sync_diff_inspector给出的差异修复sql后,过一会儿又出现数据不一致

【TiDB 使用环境】开发环境

【TiDB 版本】新集群A: v8.1.2,旧集群B: v7.1.5

【操作系统】ubuntu20.04

【部署方式】云上部署(腾讯云)/ 单个数据节点配置16核64G内存

【集群数据量】4GB

【集群节点数】 A和B集群 均是 1个monitor节点 + 3 个tidb-server/tikv/tiflash数据节点(3个tidb3个tikv3个tiflash共用3个数据节点), A集群的3个ticdc服务是部署在B集群的3个数据节点上。

【问题复现路径】
1、业务流量先是使用的旧集群B,然后新集群A是新部署的v8版本,没有数据;
2、关闭新旧集群的GC,调整tidb_gc_life_time和tidb_gc_run_interval时间为1h,用br将旧集群B的全量数据导入新集群A,执行一次sync-diff-inspector,新旧集群数据一致。在旧集群部署ticdc和创建changefeed,同步增量数据到新集群。数据将业务流量切换到新集群,然后停掉旧集群的tidb-server、停掉changefeed、停掉ticdc。
3、开启旧集群的tidb-server,在新集群部署ticdc服务,创建新集群到旧集群的changefeed,等checkpoint ts到当前时间,同步任务状态为normal, 然后获取旧集群里的tidb_cdc.syncpoint_v1表里最新的primary_ts和secondary_ts 配置到sync-diff-inspector的上、下游时间戳配置里。
4、开启新旧集群的GC
【遇到的问题:问题现象及影响】
1、新集群到旧集群的sync-diff-inspector校验结果总是显示有三个表(这三个表的数据量分别是百万级、十万、千,表名称后缀_audit)的数据新旧集群不一致。
2、即使手动执行了sync-diff-inspector给出的fix-on-downstream目录里这三个表的修复sql,过一会儿还是会出现数据同步不一致,甚至出现执行过的sql补入数据在旧集群表里又丢了。
【资源配置】
新集群:

【复制黏贴 ERROR 报错的日志】
新集群cdc的日志:没有明显错误


旧集群tikv有很多这种日志:

不一致的表是在旧集群就存在的?手动在旧集群补数据后,旧集群的数据又丢了这种情况,在没切换到新集群之前出现过吗?

是的,这三个表在旧集群是一直存在的,在没切换旧集群前,没出现过数据丢失的情况。尤其是其中一张表:login_audit里的数据,肯定是一直递增的,不会主动出现修改或删除的情况

还发现一个现象,无论这个表追到多少条数据,在突然减少数据的时候,总是减到总数7504条

原因找到了,是因为这三张表配置了TTL_ENALBE选项,在新集群里没有开启ON,设置的是OFF,导致数据不能按时(1h清理一次)清理。把清理开关打开,就同步了。

意思是 TTL 表,系统自己做的数据删除,CDC不会捕获到?这样的话,纯依赖 CDC 做同步的(比如tidb->mysql)就会出问题了

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。