一、pt-online-schema-change介绍pt-online-schema-change是percona公司开发的一个工具 , 在percona-toolkit包里面可以找到这个功能 , 它可以在线修改表结构 。而避免被锁表的情况出现 。
文章插图
1.1原理
- step1: 它会新建一张一模一样的表 , 表名一般是_new后缀
- step2: 在这个新表执行更改字段操作
- step3: 在原表上加三个触发器 , DELETE/UPDATE/INSERT , 将原表中要执行的语句也在新表中执行
- step4: 最后将原表的数据拷贝到新表中 , 然后替换掉原表
1.去官网下载对应的版本 , 官网下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/
2.下载解压之后就可以看到pt-online-schema-change
文章插图
3.该工具需要一些依赖包 , 直接执行不成功时一般会有提示 , 这里可以提前yum安装
yum install perl-DBIyum install perl-DBD-MySQLyum install perl-Time-HiResyum install perl-IO-Socket-SSL2.2 常用参数说明
- --dry-run :打印输出
- --execute:执行
- --alter:通过此选项 , 不需要alter table关键字了 。可以通过逗号指定多个修改操作 。
- --alter-foreign-keys-method
- --host=xxx --user=xxx --password=xxx
- 连接数据库的主机、用户和密码 , 可以缩写-h xxx -u xxx -p xxx , 密码可以使用参数--ask-pass 手动输入 。
- D=db_name,t=table_name
- 指定要ddl的数据库名和表名
- --charset
- 最好设置为MySQL默认字符集: utf8
- --[no]swap-tables
- 默认yes 。交换原始表和新表 , 除非你禁止--[no]drop-old-table 。
- --check-interval
- 默认1秒 , 检测--max-lag
- --[no]check-replication-filters
- 默认值为yes,如果发现任何服务器有 binlog_ignore_db and replicate_do_db , 那么就报错 。
- --check-slave-lag
- 指定一个从库的DSN连接地址,如果从库超过--max-lag参数设置的值,就会暂停操作 。
- --[no]swap-tables
- 默认yes 。交换原始表和新表 , 除非你禁止--[no]drop-old-table 。
- --max-lag
- 默认1s 。每个chunk拷贝完成后 , 会查看所有复制Slave的延迟情况 。
- 要是延迟大于该值 , 则暂停复制数据 , 直到所有从的滞后小于这个值 。
- 如果有任何从滞后超过此选项的值 , 则该工具将睡眠--check-interval指定的时间 , 再检查 。如果从被停止 , 将会永远等待 , 直到从开始同步 , 并且延迟小于该值 。
- 如果指定--check-slave-lag , 该工具只检查该服务器的延迟 , 而不是所有服务器 。
- 打印SQL语句到标准输出 。指定此选项可以让你看到该工具所执行的语句 , 和--dry-run配合最佳 。
推荐阅读
- 从淘宝MySQL数据库经典案例来看innodb如何设计主键索引
- CentOS环境下MySQL 5.7主从复制搭建
- MySQL中清空表的两种方式
- 如何查看MySQL 服务状态
- cmd中怎么进入mysql?
- mysql的left join、right join、in
- 基于Docker的MySQL主从复制搭建及原理
- MySQL 事务最全详解
- 花钱开通了会员,却发现在线4K资源也不过如此
- 娜比、露思、孔雪儿为你在线派送夏日针织衫