./bin/pt-online-schema-change --help 可以查看参数的使用 , 我们只是要修改个表结构 , 只需要知道几个简单的参数就可以了
--user= 连接mysql的用户名--password= 连接mysql的密码--host= 连接mysql的地址P=3306 连接mysql的端口号D= 连接mysql的库名t= 连接mysql的表名--alter 修改表结构的语句--execute 执行修改表结构--charset=utf8 使用utf8编码 , 避免中文乱码--no-version-check 不检查版本 , 在阿里云服务器中一般加入此参数 , 否则会报错2.为避免每次都要输入一堆参数 , 写个脚本pt.sh
#!/bin/bashtable=$1alter_conment=$2?cnn_host='127.0.0.1'cnn_user='user'cnn_pwd='password'cnn_db='database_name'?echo "$table"echo "$alter_conment"/root/percona-toolkit-2.2.19/bin/pt-online-schema-change --charset=utf8 --no-version-check --user=${cnn_user} --password=${cnn_pwd} --host=${cnn_host} P=3306,D=${cnn_db},t=$table --alter "${alter_conment}" --execute3.添加表字段
如添加表字段SQL语句为:
ALTER TABLE `tb_test` ADD COLUMN `column1` tinyint(4) DEFAULT NULL;那么使用pt-online-schema-change则可以这样写
sh pt.sh tb_test "ADD COLUMN column1 tinyint(4) DEFAULT NULL"4.修改表字段
【mysql在线修改表结构,如何避免锁表?】SQL语句:
ALTER TABLE `tb_test` MODIFY COLUMN `num` int(11) unsigned NOT NULL DEFAULT '0';pt-online-schema-change工具:
sh pt.sh tb_test "MODIFY COLUMN num int(11) unsigned NOT NULL DEFAULT '0'"5.修改表字段名
SQL语句:
ALTER TABLE `tb_test` CHANGE COLUMN age adress varchar(30);pt-online-schema-change工具:
sh pt.sh tb_test "CHANGE COLUMN age address varchar(30)"6.添加索引
SQL语句:
ALTER TABLE `tb_test` ADD INDEX idx_address(address);pt-online-schema-change工具:
sh pt.sh tb_test "ADD INDEX idx_address(address)"四、注意事项
- 禁止的一些ddl
- 由于rowcopy会产业很多的binlog , 所以做之前要确保binlog空间、数据空间有足够空间可用 。
- 禁止在业务高峰期进行pt-online-schema-change操作
- 原表不能有触发器
- MySQL最好设置为innodb_autoinc_lock_mode=2 , 否则在高并发的写入情况下 , 很容易产生所等待以及死锁
- master的表结构必须跟slave的表结构一致 , 不允许异构 , 否则pt-online-schema-change的原理就是会rename , 然后slave不一致的表结构会被master覆盖 , 切记!
- pt-online-schema-change工具是在线修改表结构的利器 , 除了上述参数还有其他参数 , 不过上述常规参数基本能满足业务需要 。
- 一定要在业务低峰期做 , 这样才能确保万无一失 , 切记!
推荐阅读
- 从淘宝MySQL数据库经典案例来看innodb如何设计主键索引
- CentOS环境下MySQL 5.7主从复制搭建
- MySQL中清空表的两种方式
- 如何查看MySQL 服务状态
- cmd中怎么进入mysql?
- mysql的left join、right join、in
- 基于Docker的MySQL主从复制搭建及原理
- MySQL 事务最全详解
- 花钱开通了会员,却发现在线4K资源也不过如此
- 娜比、露思、孔雪儿为你在线派送夏日针织衫
