当前位置: 首页 > 后端技术 > PHP

一款MySQL在线DDL工具——pt-online-schema-change_0

时间:2023-03-29 14:13:13 PHP

在运维在线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不检查版本,阿里云服务器一般加这个参数,否则会报错。work进程新建一个空表结构(alter前的结构),与alter要操作的表相同。在新表上执行altertable语句(速度应该很快。)在原表中创建触发器。三个触发器分别对应插入、更新、删除操作。将原表中的数据以一定的块大小复制到临时表中。在复制过程中,通过原表触发器对原表的写操作会被更新。在新建的临时表中将原表重命名为旧表。将临时表重命名为原表后,如果存在引用该表的外键,则根据alter-foreign-keys-method参数的值,查看与外键相关的表,并进行处理相应的设置默认在安装方法结束时删除旧的原表仅供参考(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/percona-toolkit/LATEST/pt-online-schema-change.html