在运维在线MySQL数据库时,我们经常会对数据表进行DDL更改,修改和添加字段或索引。当对表进行DDL时,表会被锁住。当表比较小的时候,比如小于1w,对前端影响不大。到时候遇到千万级别的表,就会影响前端应用对该表的写操作。pt-online-schema-change是percona公司开发的一款工具。这个函数可以在percona-toolkit包中找到。是一个在线DDL工具,可以实现在线数据表DDL操作。比如需要运行SQLADDCOLUMNmodetinyint(4)DEFAULTNULLAFTERstatus的DDL语句可以通过如下命令nohuppt-online-schema-change\--charset=utf8\--no-version-check\--user="数据库用户"\--password="数据库密码"\--host="数据库地址"\P=3306,D="数据库",t="数据表"\--alter"ADDCOLUMNmodetinyint(4)DEFAULTNULLAFTERstatus"\--execute&参数说明--user=连接mysql的用户名--password=连接mysql的密码--host=连接mysql的地址P=3306端口连接mysql的numberD=连接mysql的库名t=连接mysql的表名--alter语句修改表结构--execute执行修改后的表结构--charset=utf8使用utf8encoding避免中文乱码--no-version-check不检查版本,阿里云服务器一般加这个参数,否则会报错。工作过程1.新建一个与待改表相同的空表结构(alter前的结构)2.在新表上执行altertable语句(速度应该很快)3.在里面创建触发器原来的表。三个触发器分别对应插入、更新、删除操作。4、将数据从原表复制到临时表中,并以一定的块大小,在复制过程中传递原表上的触发器。对原表的所有写操作都会更新到新创建的临时表5.将原表重命名为旧表,将临时表重命名为原表6.如果有外键引用该表,根据对alter-foreign-keys-method参数的值,检测外键相关的表,并做相应的设置处理7.默认情况下,旧的原始表将在最后删除。安装方法仅供参考(CentOS7验证)sudoyuminstall-yperl-DBIperl-DBD-MySQLperl-Time-HiResperl-IO-Socket-SSLperl-Digest-MD5perl-TermReadKey.x86_64sudorpm-ivhpercona-toolkit-3.1.0-2.el7.x86_64.rpm参考https://www.percona.com/doc/p...
