1、创建一个和源表一样表结构的新表
2、在新表执行DDL语句
3、在源表创建三个触发器分别对应insert、update、delete操作
4、从源表拷贝数据到新表,拷贝过程中源表通过触发器把新的DML操作更新到新表中
5、rename源表到old表中,把新表rename为源表,默认最后删除源表
1、源表不能有触发器存在(insert、update、delete)
2、源表必须要有主键或唯一索引,如果没有工具将停止工作
3、源表有外键,必须使用–alter-foreign-keys-method指定特定的值
4、如果线上的复制环境过滤器操作过于复杂,工具将无法工作
5、如果开启复制延迟检查,但主从延迟时,工具将暂停数据拷贝工作
6、如果开启主服务器负载检查,但主服务器负载较高时,工具将暂停操作
7、只支持Innodb存储引擎表,且要求服务器上有该表1倍以上的空闲空间。
8、修改索引、外键、列名时,优先采用online ddl,并指定 ALGORITHM=INPLACE
下载地址:https://www.percona.com/downloads/percona-toolkit/LATEST/
[root@mysql ~]# wget https://www.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/7/x86_64/percona-toolkit-3.2.1-1.el7.x86_64.rpm
[root@mysql ~]# yum -y install percona-toolkit-3.2.1-1.el7.x86_64.rpm
[root@mysql ~]# pt-online-schema-change \
--host="127.0.0.1" \
--port=3306 \
--user="root" \
--password="xxxxxxx" \
--charset="utf8mb4" \
--max-lag=10 \
--check-salve-lag='xxx.xxx.xxx.xxx' \
--recursion-method="hosts" \
--check-interval=2 \
D="testdb1",t="tb001" \
--alter="add column age int(4) default 0" \
--dry-run
--print
--execute
参数 | 说明 |
---|---|
–host | 数据库主机IP |
–port=3306 | 端口号 |
–user=“root” | 登录用户 |
–password | 登录密码(明文) |
–ask-pass | 手动输入(密文) |
–charset=“utf8mb4” | 指定字符集为UTF8mb4 |
–max-lag=10 | 默认10s,检查slave延迟的值,超过10秒则暂停复制数据 |
–check-salve-lag= | 指定一个从库的DSN连接地址,如果从库超过–max-lag参数设置的值,就会暂停操作 |
–recursion-method=“hosts” | 默认是show processlist,发现从的方法,也可以是host |
–check-interval | –max-lag检查的睡眠时间,默认是1 |
D | 指定数据库名 |
t | 指定表名 |
–alter= | 结构变更语句,不需要 ALTER TABLE关键字。与原始ddl一样可以指定多个更改,用逗号分隔 |
–dry-run | 只进行模拟测试 |
输出结果 | |
–execute | 确定修改表 |