DM 分库分表 DDL “悲观协调” 模式介绍丨TiDB 工具分享
背景
TiDB 作为分库分表方案的一个 “终结者”,获得了许多用户的青睐。在切换到 TiDB 之后,用户告别了分库分表查询和运维带来的复杂度。但是在从分库分表方案切换到 TiDB 的过程中,这个复杂度转移到了数据迁移流程里。TiDB DM 工具为用户提供了分库分表合并迁移功能,在数据迁移的过程中,支持将分表 DML 事件合并迁移,并一定程度支持上游分表进行 DDL 变更。
分库分表 DDL 的问题(简略版)
本节首先以一个例子粗略介绍分库分表 DDL 对数据迁移的影响,然后就这个问题给出更加正式的定义。
分库分表合并迁移的定义
接下来我们尝试使用更正式一点的语言来描述这个问题,从而引出如何正确解决这个问题。
分库分表 DDL 的问题(正式版)
从上面的定义来看,DDL 会造成两个方面的问题。
解决方法
对于上述 DDL 引入的问题并基于前文对于同步正确性的定义,我们可以得到一个满足要求的充分条件:当某分表出现 DDL 同步事件时,我们将其同步暂停;直到所有分表都出现该 DDL 同步事件时,我们将 DDL 应用到下游并恢复所有分表的同步。此时我们可以保证下游表的 DDL 产生的影响等于所有分表都进行了 DDL(不考虑非确定性 DDL,例如 DDL 新增列默认值为 current_timestamp)。
悲观协调例子
左图中,当分表 t1 遇到 DDL 时,t2 同步事件还没有到这条 DDL,因此 t1 同步应当被暂停。当进展到右图时,t1、t2 分表都出现了相同的 DDL,因此此时可以将这条 DDL 应用到下游并恢复 t1、t2 的同步。
悲观协调模式限制
出现 DDL 同步事件时分表会暂停,会导致同步延迟增加。这可能会导致恢复同步时,上游 binlog 已经被清理 不支持只变更部分分表以进行灰度测试时的场景。灰度期间其余分表的同步会暂停。此外如果灰度测试结果是回滚时,无法恢复同步 要求所有分表以相同的顺序出现 DDL 同步事件
如果分表由于误操作而进入 DDL 不一致的状态,修复操作较为复杂 对于 DM 的使用者而言,可能无法控制上游 DDL 的发起从而无法满足条件
因为悲观协调模式的种种限制,DM 也提供了新的乐观协调模式,我们将在后续的文章中具体介绍,希望大家能够在深入了解两种协调模式的原理和使用限制后,根据场景选择合适的模式进行分库分表的合并迁移。
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 农文旅融合绘就美丽乡村新图景 7903345
- 2 130亿三岁影帝接了多少广告 7934244
- 3 女子误踩油门撞入医院致1死1伤 7861300
- 4 春回大地农事起 春耕备耕正当时 7724599
- 5 车牌尾号666过完户车主突然失联 7601705
- 6 下周将迎超级大回暖 气温火箭式飙升 7520508
- 7 男生用镜头记录下女友5年的蜕变 7481131
- 8 深圳女子报警:“我举报我自己” 7321804
- 9 乌克兰被曝并无大量稀土 7279823
- 10 浙江人实现一户一雪人 7199665