DM迁移流程或原理

Job 执行

冲突检测

binlog 顺序同步模型要求按照 binlog 顺序一个一个来同步 binlog event,这样的顺序同步势必不能满足高 QPS 低同步延迟的同步需求,并且不是所有的 binlog 涉及到的操作都存在冲突。Binlog replication 采用冲突检测机制,鉴别出来需要顺序执行的 jobs,在确保这些 jobs 的顺序执行的基础上,最大程度地保持其他 job 的并发执行来满足性能方面的要求。

冲突检测流程如下:

冲突检测实现比较简单,根据转换步骤获得每条 statement 对应的 primary/unique key 信息,来进行交集检测,如果存在交集那么认定是需要顺序的执行两条 statement,请参考 具体实现代码

这个问题,有说法了,dm有冲突检测机制。确保primary/unique key的设置正确,就不会发生上述这种,insert id=1 之后delete id=1,乱序执行的问题。

1 个赞

这几个事件是被dm忽略的。是没有办法同步的。

https://docs.pingcap.com/zh/tidb/stable/shard-merge-best-practices#合表迁移过程中在上游增删表

文档对这个问题有专门的描述。

受益匪浅,学习了~!

303上面有介绍

表结构更新肯定是不过滤。我说的是 drop truncate create index 。上下游 不一致的只能是索引和表数量

你这个问题。我感觉就是人为造成的呀。tidb不支持alter table 多个修改,所以只要是DM同步的上游mysql所有的DDL 全部单独分开执行。不要写在一个sql里面呀。