一 背景
在实际生产应用中,经常会有mysql表结构修改的场景,涉及到的表数据量大,如果直接修改,锁表时间过长,影响正常业务。因此,寻求通过在线DDL工具进行表结构修改。
这里选择了常用的2个在线DDL工具gh-ost 和pt-online-schema-change进行测试。
二 gh-ost 是github贡献的一款online DDL工具。大致原理如下
1 根据原表新建一个临时表,与原表表结构一致,然后执行表结构修改
2 拷贝原表的已有数据到新的临时表
3 通过伪装成mysql的一个slave,读取mysql binlog日志,同步实时的更新数据到新表
4 数据copy完成以后,锁住旧表,交换临时表和旧表的表名
5 删除旧表,操作完成
注意事项:
1 Gh-ost 有三种工作模式,可以根据情况选择
连上从库,修改应用到主库:此模式会自动搜索从库,在从库上拉取binlog,但是表结构的修改直接应用到主库。默认是采用此模式
直接应用到主库:直接从主库拉取binlog日志,修改也是应用到主库,通过--allow-on-master来启用
在从库修改和测试:所有操作都在从库上进行,通过--migrate-on-replica参数启用,此模式适用于测