配置文件中配置ignore-txn-start-ts参数不生效

【 TiDB 使用环境】线上、测试、调研
【 TiDB 版本】
【遇到的问题】
通过配置文件,使用ignore-txn-start-ts参数,跳过指定的操作,没有生效。

1、停掉cdc复制

2、上游插入ID=333的记录(此时下游的表没有ID=333的记录)
insert into cdcdb.test5 values(333)"

3、查看当前数据库的TSO
cdc cli --pd=http://xxx.xxx.xxx.xxx tso query
434708167235993601

4、编辑同步配置文件,添加ignore-txn-start-ts
vi cdc.toml
ignore-txn-start-ts = [434708167235993601]

5、启动CDC复制
$ tiup ctl:v4.0.16 cdc changefeed update --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=“cdc2” --config cdc.toml
Starting component ctl: /home/tidb/.tiup/components/ctl/v4.0.16/ctl cdc changefeed update --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=cdc2 --config cdc.toml
Diff of changefeed config:
{Type:create Path:[Config Filter IgnoreTxnStartTs 0] From: To:434708167235993601}
Could you agree to apply changes above to changefeed [Y/N]
y
Update changefeed config successfully! Will take effect only if the changefeed has been paused before this command
ID: cdc2
Info: {“sink-uri”:“tidb://root:admin@10.19.248.128:4000/”,“opts”:{“_changefeed_id”:“cli-verify”},“create-time”:“2022-07-19T11:00:21.200455131+08:00”,“start-ts”:434686528597262343,“target-ts”:0,“admin-job-type”:1,“sort-engine”:“unified”,“sort-dir”:“”,“config”:{“case-sensitive”:true,“enable-old-value”:true,“force-replicate”:true,“check-gc-safe-point”:true,“filter”:{“rules”:[“.”],“ignore-txn-start-ts”:[434708167235993601]},“mounter”:{“worker-num”:16},“sink”:{“dispatchers”:null,“protocol”:“default”},“cyclic-replication”:{“enable”:false,“replica-id”:0,“filter-replica-ids”:null,“id-buckets”:0,“sync-ddl”:false},“scheduler”:{“type”:“table-number”,“polling-time”:-1}},“state”:“stopped”,“history”:null,“error”:null,“sync-point-enabled”:false,“sync-point-interval”:600000000000,“creator-version”:“v4.0.16”}

6、查看changefeed信息,有ignore-txn-start-ts相关信息
tiup ctl:v4.0.16 cdc changefeed query --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=cdc2
Starting component ctl: /home/tidb/.tiup/components/ctl/v4.0.16/ctl cdc changefeed query --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=cdc2
{
“info”: {
“sink-uri”: “tidb://root:admin@10.19.248.128:4000/”,
“opts”: {
“_changefeed_id”: “cli-verify”
},
“create-time”: “2022-07-19T11:00:21.200455131+08:00”,
“start-ts”: 434686528597262343,
“target-ts”: 0,
“admin-job-type”: 0,
“sort-engine”: “unified”,
“sort-dir”: “”,
“config”: {
“case-sensitive”: true,
“enable-old-value”: true,
“force-replicate”: true,
“check-gc-safe-point”: true,
“filter”: {
“rules”: [
.
],
“ignore-txn-start-ts”: [
434708167235993601
]
},

7、查看下游ID=333,发现记录同步过来了。

问题:这是为啥呢?好像ignore-txn-start-ts没有起效果。

【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1 个赞

按照这个操作,停止旧的。启动新的

这个确定必须重新创建一个新的changefeed吗?我是在原来的changefeed上修改的。

1 个赞

需要重新建一个

1 个赞

重新创建一个新的changefeed,然后再同步配置文件,添加ignore-txn-start-ts vi cdc.toml ignore-txn-start-ts = [434708167235993601]
是这样吗?

1 个赞

我咋感觉这说的有点重复呢?

1 个赞

就是在新的任务配置文件跳过指定的事务,然后在start-ts指定为旧的任务的checkpoint-ts,保证不丢数据。

1 个赞

明白了,试一试。

1 个赞

我现在又做另一个测试,上游执行一个drop table操作,这个table在下游不存在,然后复制失败了,查看当前的chekpoint以后,让start-ts的checkpoint加1,更新changefeed,提示这个start-ts被忽略了,这个是问啥呢?

$ cdc cli changefeed query --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=testcdc|grep “checkpoint-ts” “checkpoint-ts”: 434709261042057217,

$ tiup ctl:v4.0.16 cdc changefeed update --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=“testcdc” --start-ts 434709703161020418 --config cdc.toml Starting component ctl: /home/tidb/.tiup/components/ctl/v4.0.16/ctl cdc changefeed update --pd=http://xxx.xxx.xxx.xxx:2379 --changefeed-id=testcdc --start-ts 434709703161020418 --config cdc.toml [2022/07/20 11:21:08.637 +08:00] [WARN] [client_changefeed.go:552] [“this flag cannot be updated and will be ignored”] [flagName=start-ts] changefeed config is the same with the old one, do nothing

跳过错误的步骤和之前一样,不要直接修改

1 个赞

创建新的同步任务,我配置文件里面配置的ignore-txn-start-ts 和 创建changefeed时候指定的start-ts分别应该配置多少呀?

设置成这样吗:

ignore-txn-start-ts:changefeed的checkpoint

start-ts:changefeed的checkpoint-ts+1

报错的日志里有txn ts

1 个赞

看了cdc.log日志,没发现报错的时候有相关的ts提示内容。

可以在 TiCDC 的日志中搜索下是否存在 Row changed event ignored 相关日志,如果存在则说明 ignore-txn-start-ts 已经正确配置并成功过滤掉相关 event。

1 个赞

我的测试过程是这样的: 1、在上游创建一个表TEST,插入数据id=1。

2、在下游把自动同步过来的TEST表手工删除。

3、查看CDC复制任务失败,提示TEST不存在。

在这种场景下,我怎么把这个错误跳过去,让复制继续进行下去。

我在cdc.log中没有查看到相关的ts的提示内容,如果能看到此时的这个ts信息,我可以跳过去。

谢谢。

1 个赞

这是非常好建议,目前还没有类似的日志,已经建立 issue Log start-ts in log when TiCDC MySQL sink fails to execute DML/DDL · Issue #6460 · pingcap/tiflow (github.com)

我现在遇到的疑问是:
1、如果遇到DDL执行报错,我可以按照官网说的如下方式进行处理:找到同步任务当前的checkpoint-ts的值,让他加1,然后创建新的同步任务。

2、如果遇到其他问题,比如官方提到的如下场景

我能从同步任务里面找到checkpoint-ts的值,但是我怎么知道当时报错的那个点的ts值呢(ignore-txn-start-ts需要配置的值不知道怎么写),也就是说我不知道跳过的那个ts值,怎么找到。

已在该 PR 中添加 start-ts sink(ticdc): add start ts to mysql sink and refine get tso by overvenus · Pull Request #6462 · pingcap/tiflow (github.com)

:+1:

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。