IIWAB MySQL大表ONLINE DDL之PTOSC - IIWAB

MySQL大表ONLINE DDL之PTOSC

IIWAB 1年前 ⋅ 3697 阅读

从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

全部评论: 0

    我有话说: