无锁变更
warning
- 不支持 UK 索引
其他
线上业务不建议直接进行DDL操作,通常有几种做法来避免影响业务:
- 业务低峰期变更:
合适的变更窗口以及窗口长度直接影响变更结果。过大的表由于在变更窗口内未执行完成,仍将影响业务。
- 备库修改后切换主备:
需要存在主备实例,并能够在合适窗口进行主备切换。
- Online修改工具:
- PT-Online(PT-Online-Schema-Change):工作原理是创建和源表A一样的表A_gst执行DDL操作,同时在A上创建一个DML触发器,然后将A中的数据拷贝到A_gst,在拷贝过程中产生的增量变更就用触发器完成同步更新。拷贝结束后执行两张表的rename操作完成变更。
- OSC(OnlineSchemaChange):工作原理和pt-online-schema-change基本一致,不同的地方是它采用的是异步模式,在A_gst的基础上创建了一张日志表,触发器的条目更新将直接落在日志表中,后台进程将日志表中的条目应用到A_gst表。这样整个流程上是异步的,也能够控制回放速度。
- gh-ost:与上面两种变更流程基本一致,但是没有使用触发器的设计,所以增量变更的数据来源不是触发器,而是Binlog文件。订阅读取该文件中A表的变更记录,将记录解析并应用到A_gst表。这样的数据对于gst表回放非常有利,Binlog中存储的都是A表的记录,易于直接读取和应用。
对比项 | ㅤ | 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 |
Loading...