从MySQL5.6开始支持ONLINE DDL,5.7、8.0版本也在针对ONLINE DDL特性进行升级。关于不同的DDL操作对DML带来的影响,可以参考MySQL官网的online ddl说明(https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-column-operations)。
ptosc是pt-online-schema-change的简称,由Percona-toolkit工具包所提供,是一个在线修改表结构工具。使用ptosc对大表进行DDL可以最大程度的减少锁表阻塞,并且主从延迟可控。其原理就是为需要进行DDL的大表创建出一个新表和对应的触发器,然后复制原表数据到新表,复制期间如果有新数据产生则通过触发器复制到新表里。数据复制完成后会删除原表,再将新表改名。整个执行进度是可以看见的。
# 安装percona-toolkit
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-toolkit
#语法示例
pt-online-schema-change
--alter "这里写alter table之后的那部分SQL语句"
--alter-foreign-keys-method=rebuild_constraints
--check-interval=5
--check-replication-filters=no
--chunk-size=10000
--critical-load=thread_connected:4000,thread_running:300
--max-load=thread_connected:2500,thread_running:200
--recursion-method=none
#DDL语句
pt-online-schema-change h=10.3.0.*,P=****,u=***,p=****,D=$database_name,t=$table_name --alter "MODIFY COLUMN insure_json longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '投保JSON';" --execute
注意:本文归作者所有,未经作者允许,不得转载