首批通过分布式安全可靠测评,为关键业务系统打造
适配 Online DDL 工具介绍
更新时间:2026-04-14 15:36:02
本文为您介绍什么是 Online DDL、适配 Online DDL 工具的使用限制,以及对数据迁移任务的影响和适配方案。
背景信息
Online DDL 又称为无锁结构变更,主要是为了解决因数据库机制问题,在进行部分结构变更时会触发锁表而导致业务阻塞的问题。gh-ost、pt-osc 和阿里云 DMS 等通用支持 Online DDL 的工具,对于无锁结构变更主要的处理原理如下:
创建与源表结构一致的临时表。
应用结构变更 DDL,变更临时表的表结构。
全量复制源表的数据至临时表。
增量同步源表的数据至临时表,直至源表与临时表的数据一致。
重命名源端为待删除表,重命名临时表为源表。
通过上述方案,Online DDL 工具在大数据量的情况下,能够有效地解决长时间锁住源端对业务的阻塞性影响。
使用限制
当前版本仅支持源端为 MySQL 数据库,且使用阿里云 DMS、gh-ost 或 pt-osc 进行无锁结构变更操作的场景。
适配 Online DDL 工具将 Online DDL 的语句还原为用户的 DDL 语句,无法解决用户的 DDL 语句在目标端执行时遇到的锁表问题,请评估目标端数据库类型对 DDL 的支持程度。
选择配置适配 Online DDL 工具后,仅对后续执行的 Online DDL 生效。配置适配 Online DDL 工具之前执行的 Online DDL 将保持原行为,可能导致数据迁移任务异常。
适配 Online DDL 工具将根据规则过滤符合 Online DDL 工具临时表语义的表对象。如果您的业务表符合 Online DDL 工具临时表语义,同样会被过滤掉,导致数据同步不符合预期。各工具临时表的规则如下。
Online DDL 工具 镜像临时表 其他临时表 gh-ost _{原表名}_gho _{原表名}_del
_{原表名}_ghcpt-osc _{原表名}_new _{原表名}_old DMS 无锁结构变更 tp_{变更ID}_ogt_{原表名}
tp_{变更ID}_g_{原表名}tp_{变更 ID}_ogl_{原表名}
tp_{变更 ID}_l_{原表名}
tp_{变更 ID}_del_{原表名}
tp_{变更 ID}_d_{原表名}
对数据迁移任务的影响
如果源端发生了 Online DDL,根据迁移对象选择范围的不同,对数据迁移任务会产生不同的影响。
迁移表对象的选择未覆盖 Online DDL 生成的临时表
触发场景:通常在数据迁移任务中,选择对象时使用指定对象方式,或者使用匹配规则方式的语义中未覆盖临时表。
影响:因为数据迁移功能未将临时表的创建、结构变更、重命名操作完整复制至目标端,会触发源端与目标端表结构不一致而导致的任务中断的问题。
迁移表对象的选择覆盖了 Online DDL 生成的临时表
触发场景:通常在数据迁移任务中,选择对象时使用匹配规则方式,并且匹配规则方式的语义中覆盖了临时表。
影响:数据迁移将完整复制源端的无锁结构变更动作,包括源端临时表的大量 DML,该场景不会影响任务正常运行,但是会产生大量数据同步,影响性能。
数据迁移任务的适配方案
数据迁移在控制台页面提供了是否开启适配 Online DDL 工具的功能,您在选择开启后,数据迁移后台将进行以下操作。
配置过滤条件,过滤所有符合 Online DDL 工具临时表语义的表对象,不同步至目标端。
保存源端变更临时表的 DDL,识别到源端无锁结构变更完成后,在目标端源表应用结构变更 DDL。
通过上述行为,可以解决以下两个问题。
过滤临时表的 DML 和 DDL,减少无效的表对象传输对数据迁移任务的性能影响。
将 Online DDL 的语句还原为用户的 DDL 语句,避免源端与目标端最终表对象结构不一致导致数据迁移任务中断。