TiCDC发生故障停止后,checkpoint TSO的数据被清理掉没有保存

TiCDC配置gc-ttl使用的是默认值: 86400,TIDB是手动设置的tidb_gc_life_time=3h。当TiCDC故障后,如果根据changefeed任务状态会显示当前已经执行的checkpoint 的tso(如下图所示的431496573345857565),正常来说按照官方说法,即便超过了TiDB的tidb_gc_life_time,这个tso也是会保存不会释放的。

tidb@prod-asset-tipd-e01:~$ tiup cdc cli changefeed  --pd="http://127.0.0.1:2379" list
Starting component `cdc`: /home/tidb/.tiup/components/cdc/v5.1.0/cdc cli changefeed --pd=http://127.0.0.1:2379 list
[
  {
    "id": "sync-task-2",
    "summary": {
      "state": "normal",
      "tso": 431496573345857565,
      "checkpoint": "2022-02-28 14:13:18.469",
      "error": {
        "addr": "172.18.244.13:8300",
        "code": "CDC:ErrProcessorUnknown",
        "message": "*******************'"
      }
    }
  },

但我这里遇到了一个问题,是使用br backup时却会报[BR:Backup:ErrBackupGCSafepointExceeded]backup GC safepoint exceeded


将tso加1后,备份同步就能成功

但实际上这个tso的数据是丢失的,我按照这个步骤操作后,后续TiCDC同步就开始报下面的错了,排查几天后,发现是下游TiDB的数据有问题了。
对应的文章是:[CDC:ErrMySQLTxnError]Error 1292: Incorrect time value

1)你这是两个问题,ticdc和br备份问题
2)出问题的时候登录pd-ctl ,执行service-gc-safepoint 查看各个service需要保留的时间点
3)br链接中帖子问题比较明显,业务场景的问题。你这个问题还需要再看看。

这次遇到的场景是:TiCDC遇到了一个大事务(上游TiDB修改了500W数据),出现了同步延时超过了tidb_gc_life_time的保留时间,后边发现是下游TiDB执行报错了(超过了下游TiDB的最大允许事务),就想着 通过官方文档的有提到,如果遇到SQL执行问题,可以通过BR工具的增量备份/同步的方式,将该SQL的变更同步下游TiDB,然后新建changefeed来继续同步。

同时官方文档是有说:service GC safepoint 可以保证该时间点及之后的数据不被 GC 清理掉。但实际上按照我之前的截图,safepoint这个时间点的数据其实是被清理了,只保留了该时间点之后的数据。

1 个赞

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