ticdc不同步了,checkpoint卡住不动

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.2.1
【复现路径】
上游源端tidb-server有个节点OOM了,OOM后ticdc就卡住不动了,感觉是碰到了BUG,然后尝试把同步任务删除,重建任务,又遇到[CDC:ErrStartTsBeforeGC]fail to create changefeed because start-ts 440847256865996803 is earlier than GC safepoint at 440856954345881600报错无法重建,实际查看gc_safe_point是440847256865996803,这是为什么不能创建呢?

【遇到的问题:问题现象及影响】
【资源配置】
【附件:截图/日志/监控】


另外补充一下,中间在修复老的同步任务过程中,尝试重启CDC,重启下游的tidv-server都没效果,然后把gc_life_time设置成48h,想着第2天来重做。

不能创建的原因是因为gc时间过了。比如你原来的gc_life_time设置的是1h,你1h后那就已经过,可以查看下 select * from mysql.tidb where variable_name like ‘%gc%’;
看下tikv_gc_safe_point在start-ts之前还是之后,如果是之后就会出现你启动任务的报错

tso和时间的相互转换可以参考下面

SELECT TIDB_PARSE_TSO(@@tidb_current_ts);

SELECT conv(concat(bin(unix_timestamp(‘2022-01-06 12:30:59’) * 1000),‘000000000000000001’),2,10);

至于为什么checkpoint不动了则需要你提供cdc, pd,tikv,tidb的相关日志和cdc相关监控才可能判断出来

1 个赞

你修改gc_life_time的时候cdc停留的gc_safe_point应该已经过期了,你现在最早的gc_safe_point应该就是440856954345881600了,但是cdc上记录的是440847256865996803,中间丢失的数据无法补回了


疑问就是我这系统里显示的gc_safe_point是在20230417-10:33:45,依旧是卡住的那一刻,按道理我那这个时间点转换成tso应该可以接上来的。

还有cdc卡住不是应该把gc给hung住24小时的吗?

Gc相关的可以看下这两篇文章:

搞不清楚原因了,直接重做恢复了。