线上业务不建议直接进行DDL操作,通常有几种做法来避免影响业务:
业务低峰期变更:
合适的变更窗口以及窗口长度直接影响变更结果。过大的表由于在变更窗口内未执行完成,仍将影响业务。
备库修改后切换主备:
需要存在主备实例,并能够在合适窗口进行主备切换。
Online修改工具:
| 对比项 | DMS无锁结构变更 | gh-ost | |
|---|---|---|---|
| 全量拷贝阶段 | 拷贝限流 | Y:手动或自动 | Y:手动 |
| 数据一致性校验 | Y | N | |
| 异常容错 | Y | Y:部分支持 | |
| 拷贝性能自适应 | Y | N | |
| 增量回放阶段 | 回放限流 | Y:手动或自动 | Y:手动 |
| 多线程回放 | Y | N | |
| 数据一致性校验 | Y | N | |
| 异常容错 | Y | Y:部分支持 | |
| 回放性能自适应 | Y | N | |
| 备库订阅 | N | Y | |
| 切换表阶段 | 切换原子性 | Y | Y |
| 表副本延迟删除 | Y | N | |
| 切换窗口设置 | Y | Y | |
| 锁保护机制 | Y | N | |
| 功能性 | 备库变更 | N | Y |
| DTS(数据传输)无缝衔接 | Y | N | |
| 变更策略设置(DDL算法识别) | Y | N | |
| RocksDB引擎 | Y | N | |
| ToKuDB引擎 | Y | N | |
| InnoDB引擎 | Y | Y | |
| 虚拟列变更 | Y | N | |
| Json列变更 | Y | Y | |
| 多值索引和函数索引 | Y | - | |
| 优化表空间(Optimize) | Y | N | |
| 表副本延迟删除 | Y | N | |
| 安装部署 | Y:免安装 | Y:本地安装 | |
| 白屏化运维 | Y | N | |
| 执行进度可视化 | Y | N |