DM同步上游MYSQL带外键表问题

【TiDB 使用环境】
生产环境
【TiDB 版本】
v8.5.1
【操作系统】
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】

我的上游是MYSQL8.0.23,有一些表带外键约束,现在通过DM同步到下游TIDB,发现在上游父表删除了数据,TIDB这边子表并没有级联删除掉,我如何解决这个问题?我是希望上游MYSQL和下游TIDB保持实时同步的

补充任务配置:

我的步骤:
1、使用dumpling导出上游库
2、使用lightning导入到下游TIDB库(导入之前删除了zltest.a2子表的外键约束)
3、启动任务开始同步

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

那不是写了不兼容外键,你自己删一下喽

无法在上游源头库删除掉外检约束,我在找有什么方法可以绕开

我只能想个笨一点的方法,自己写个脚本去删下游外键没有级联删掉的数据

1 个赞

你的 DM 任务没有同步子表么? MySQL的 row 格式保证即便是通过外键约束删除的子表,这个删除也会产生 DELETE 类型的 BINLOG EVENT 的

发现上游MYSQL8通过外键级联删除的数据并不会记录BINLOG事件,,所以导致DM获取不到对应BINLOG进而导致TIDB下游数据不一致

上游 MySQL8的 binlog 格式是什么? 是row 还是mixed 啊?


不过貌似 mixed 的级联删除,也是会被记录成 ROW 格式的,那就太奇怪了。。。

我上游不可能改为MIX的,都是用ROW的,另外原文链接可以发下吗?

tidb本来就不兼容外键约束,只能自己想办法绕过去实现了。。。

是DM数据迁移工具不支持,本身TIDB高版本(v8.5.1)是支持的。本质上就是DM和TIDB 对外键约束的行为不一致

ROW 格式
会记录所有被更改的行——包括主表的删除以及因外键约束被自动删除的子表中的所有记录。所有受影响的行都会被单独写入 binlog

你是不是有做过滤?

那就过滤掉这个表不同步,只同步没有外键的表。