在 运维mysql数据库时,我们总会对数据表进行ddl 变更,修改添加字段或者索引,对于mysql 而已,ddl 显然是一个令所有MySQL dba 诟病的一个功能,因为在MySQL中在对表进行ddl时,会锁表,当表比较小比如小于1w上时,对前端影响较小,当时遇到千万级别的表 就会影响前端应用对表的写操作。


一、percona-toolkit的安装配置

方法一:使用源码安装

yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
 cd /root/soft
 tar zxvf percona-toolkit_2.2.11.tar.gz
 cd percona-toolkit-2.2.11
 perl Makefile.PL
 make
 make install


方法二使用rpm安装

yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
yum -y install http://www.percona.com/downloads/percona-toolkit/2.2.12/percona-toolkit-2.2.12-1.noarch.rpm



二、pt-online-schema-change工具的使用,使用该工具不会锁表

1、添加列/删除字段

pt-online-schema-change -uroot -hlocalhost -p123456   --alter='add column test char(4)' --execute D=dyc,t=test


注:

--alter参数表示给表进行修改的语句

--execute

        D:表示数据库

        t:表示表

注意:使用此工具的前提是表表必须有主键存在,不然就会报错


Cannot connect to D=houyi,h=127.0.0.1,p=...,u=root

Cannot chunk the original table `dyc`.`test`: There is no good index and the table is oversized. at ./pt-online-schema-change line 5353.


删除列同理:

pt-online-schema-change -uroot -hlocalhost -p123456   --alter='drop column test' --execute D=dyc,t=test


2、添加/删除索引

pt-online-schema-change -uroot -hlocalhost -p123456 --alter='add index user_id(Name)' --execute D=dyc,t=test


注:此处由于测试列建的比较少所以使用了name,如果是正式数据库千万别这么干,呵呵

删除索引

pt-online-schema-change -uroot -hlocalhost -p123456 --alter='drop index user_id' --execute D=dyc,t=test