往一张数据量比较大的表中添加字段

参考资料

三种工具

  1. 原生 Online DDL(Mysql >=5.6)
  2. pt-osc(pt-online-schema-change)
    • 1.创建一个与原表结构相同的空表,表名是 _new 后缀;
    • 2.修改新表的表结构;
    • 3.在原表上加三个触发器:delete/update/insert,用于 copy 数据过程中,将原表中要执行的语句在新表中执行;
    • 4.将原表数据以数据块(chunk)的形式 copy 到新表;
    • 5.rename 原表为 old 表,并把新表 rename 为原表名,然后删除旧表;
    • 6.删除触发器。
    • 步骤4的细节——数据拷贝:对正在拷贝的数据加共享锁;使用INSERT LOW_PRIORITY IGNORE INTO忽略已有数据;chunk-size和chunk-time参数限制单次拷贝的时间
    • 步骤4的细节——三个触发器:
  3. gh-ost
    • 创建幽灵表:_xxx_gho(和原表结构一致),_xxx_ghc(用于记录变更日志)
    • 修改幽灵表的表结构
    • 模拟成备库连接到真正的主库或备库
    • 将数据从原表拷贝到幽灵表
    • 应用 binlog events 到幽灵表
    • 进行切换(cut-over)

results matching ""

    No results matching ""