无锁变更

warning

  1. 不支持 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...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP