ticdc任务报错恢复

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.2
【遇到的问题:问题现象及影响】
ticdc任务因为rename导致任务报错,
报错内容:
“code”: “CDC:ErrSyncRenameTableFailed”,
“message”: “[CDC:ErrSyncRenameTableFailed]table’s old name is not in filter rule, and its new name in filter rule table id ‘41682’, ddl query: [\nRENAME TABLE senior.tmp_ads_product_user_label TO temp, senior.ads_product_user_label TO senior.tmp_ads_product_user_label, temp TO senior.ads_product_user_label], it’s an unexpected behavior, if you want to replicate this table, please add its old name to filter rule.”

于是尝试跳过该rename操作。
尝试方法一:通过query查到报错任务的tso为454558214766460960,通过先pause任务,然后在配置文件中添加ignore-txn-start-ts=454558214766460960,再resume任务,仍然是报同样的错。
尝试方法二:
重建新任务,使用上述添加过ignore-txn-start-ts=454558214766460960参数的配置文件,并指定start-ts为454558214766460960,发现新任务仍然是同样的报错。
尝试方法三:
重建新任务,指定新任务的start-ts为454558214766460961(即tso+1),仍是同样的报错。
尝试方法四:
在配置文件中添加
[[filter.event-filters]]
ignore-event = [“rename table”]
后resume该任务,依旧是同样的报错。
疑问1:
ignore-txn-start-ts 和ignore-event在添加后为什么没生效
疑问2:
新建任务指定了tso+1,为什么还是同样的报错。

应该是已知 bug ,建议升级到 v6.5.10 的版本,强烈建议升级到 v7.1 版本。
https://docs.pingcap.com/zh/tidb/stable/release-6.5.4

2 个赞

找了一个7.5版本的测试环境测试了下,rename table test_liuxj2.aa to test_liuxj2.temp,test_liuxj2.bb To test_liuxj2.aa ,test_liuxj2.temp to test_liuxj2.bb;依旧不行,报错信息如下:

“id”: “ticdc-liuxj”,
“namespace”: “default”,
“summary”: {
“state”: “warning”,
“tso”: 454664114319654917,
“checkpoint”: “2024-12-17 11:25:53.673”,
“error”: {
“time”: “2024-12-17T11:25:55.782438345+08:00”,
“addr”: “10.55.160.26:9300”,
“code”: “CDC:ErrSnapshotTableNotFound”,
“message”: “[CDC:ErrSnapshotTableNotFound]table 2353 not found in schema snapshot”

当前的 table filter 是怎么指定的?

过滤规则缺rename前表名?
matcher = [“test.worker”]

#enable-old-value = true
[filter]
rules = [‘test_liuxj2.']
[[filter.event-filters]]
#matcher = ['test_liuxj2.
’]
#ignore-sql = [‘rename’]
[sink]
dispatchers = [
{matcher = [‘test_liuxj2.*’], dispatcher = “table”},
]
protocol = “canal-json”

原始的没有过滤,后来加上了
[[filter.event-filters]]
matcher = ['test_liuxj2.*’]
ignore-sql = [‘rename’]
也不行

已经报错了之后再加就来不及了,需要在rename 操作之前就把 filter 设置好
可以参考这个链接看下
https://docs.pingcap.com/zh/tidb/v8.4/ticdc-ddl#rename-table-类型的-ddl-注意事项