DM 同步 MySQL 带外键的表,CASCADE 不同步

上游 MySQL 有外键 ON DELETE CASCADE,DM 同步到 TiDB 后,主表删除时子表没跟着删,确认下游也建了外键,是不是 DM 对 CASCADE 支持有限?要怎么处理?

1 个赞

①业务手动分层删;
②TiDB 建触发器;
③上游取消 CASCADE;
④DM 自定义改写 SQL。
最优:上游去掉级联,业务控制删除顺序

1 个赞

TiDB 虽然支持外键 CASCADE 逻辑,但上游没下发子表删除 binlog,下游不会自动执行级联删除。

MySQL 的ON DELETE CASCADE级联删除属于内部隐式操作,不会写入 Binlog,导致 DM 同步后 TiDB 无法触发级联;同时低版本 TiDB 外键不生效、DM 多线程同步也会引发异常。可将隐式级联改为显式删子表再删主表,或在源端加触发器,也可升级组件并配置单线程同步来解决。

可将隐式级联改为显式删子表再删主表 ,或在源端加触发器,也可升级组件并配置单线程同步来解决。

DM 同步延迟先看 relay log 有没有堆积,检查源库和目标之间的网络延迟。全量阶段慢可以调大 worker 数量和 batch size,增量延迟看 source 的 binlog 大小是否合理。

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