在 运维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 -yyum -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
本文出自 “成┾%¥☆风” 博客,请务必保留此出处http://lovesource.blog.51cto.com/1454821/1588329