MySQL安全修改表结构、加索引:ON-Line-DDL工具有哪些
一、MySQL原生Online DDL
从MySQL 5.6开始,官方引入了在线DDL机制,支持部分ALTER TABLE
操作在不锁表或仅短暂锁表的情况下完成,如添加/删除列(某些情况下)、修改列属性、添加/删除索引、更改存储引擎等。其优点是无需额外部署工具,可控性强,兼容性好,对应用无侵入。缺点是并非所有DDL操作都支持完全不锁表,适用于中小表、对锁敏感度低的场景。
二、pt-online-schema-change(pt-osc)
1、简介
由Percona公司开发的开源工具,用于在不影响线上服务的前提下完成表结构变更。它通过创建临时表,利用触发器复制数据等方式,将原表数据复制到新表,最后替换原表,从而实现在线修改表结构。该工具完全避免锁表,适用于大表操作,还支持回滚机制,保障数据安全,但在高并发写入场景下可能存在性能问题。
官网:https://docs.percona.com/percona-toolkit/pt-online-schema-change.html
2、基本原理
1、创建新表:首先创建一个与原表结构相同的新表,表名一般以 _new 作为后缀。
2、修改新表:在新表上执行表结构变更操作。
3、创建触发器:在原表上创建三个触发器(DELETE、UPDATE、INSERT),以确保对原表的操作同步到新表。
4、复制数据:将原表的数据复制到新表。
5、替换表:将新表替换为原表。
6、更新外键:如果有外键约束,需要更新外键指向新表。
7、删除旧表:删除旧表和触发器
三、gh-ost
1、简介
由Github维护的MySQL online DDL工具。它同样使用了镜像表的形式,但放弃了使用低效的trigger,而是从binlog中提取需要的增量数据来保持镜像表与源表的数据一致性。整个Online DDL操作仅在最终rename源表与镜像表时会阻塞几秒钟的读写。gh-ost输出的信息、迁移数据的效率,以及支持的功能都比较优秀,且进程意外中断以后,可以新启动一个进程继续进行Online DDL,适用于对主库影响要求低、希望减少同步延迟的场景。
开源地址:https://github.com/github/gh-ost
2、使用
暂无