TiCDC 5.0 默认未开启 old value

ticdc 5.0 版本按官方文档看,应该是默认old value 模式了,但我试了下 update 还是被转成了 delete+insert

创建 ticdc 任务:


这里未指定 safe-mode=false

下游 MySQL 打出的 binlog:

我理解,如果 old value 生效的话,tidb 执行 update 语句,同步到 MySQL 端应该也是 update 把。

1赞

指定下 safe-mode 在试试~
等你的测试结果

创建任务指定 safe_mode: --sink-uri="mysql://root:mysql@xxx:3306/?time-zone=&safe-mode=false"

下游 binlog 正常输出 update 了

1赞

5.1 的 CDC方案看来可用阿~

多测测~

【 Bug 的影响】
ticdc 5.0 没有默认开启 old vaule 模式

【可能的问题复现步骤】
创建任务命令:
tiup ctl:v5.0.2 cdc changefeed create --pd=http://172.26.55.91:2379 --sink-uri="mysql://root:mysql@XXXX:3306/?time-zone=" --changefeed-id="dev-task"

【看到的非预期行为】
默认创建的任务,还是会把update转成delete+insert

【期望看到的行为】
默认使用old value

【相关组件及具体版本】
tidb5.0.2 版本

【其他背景信息或者截图】
下游binlog截图在楼上

已反馈给 @qizheng 老师,感谢反馈~

1赞

5.0 默认是开启 old value,只是在开启 old value 后,为了保证数据同步的可重入,SQL 的转化逻辑根据 safe mode 不同也是有区分的 https://github.com/pingcap/ticdc/pull/955
image

1赞

了解了,所以要想原封不动的同步sql,需要默认 old value 再加上指定 safe-mode=false 是吧,谢谢大佬答疑