示例:
# 添加字段, 其他ddl操作 只需要修改alter="xxxx"pt-online-schema-change -uroot -proot1234 --alter="add column info varchar(10) COMMENT '信息'" --execute D=test,t=tr --max-load=Threads_connected:650 --critical-load=Threads_running=550 --charset=utf8 --nocheck-replication-filters --set-vars innodb_lock_wait_timeout=30000
参数说明:
--nocheck-replication-filters :不检查复制过滤器,建议启用。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--chunk-size=50 Number of rows to select for each chunk copied. Allowable suffixes are k, M, G.默认1000
--critical-load="Threads_running=600" 表示线程到600自动退出,默认值50
--max-load="Threads_running=100" 表示线程到100暂停pt操作,默认25
--progress=time,2 两秒打印一次日志输出
--max-lag 最大延迟,超过这个就等待 1m 一分钟 如果有没有指定单位,就是秒 --max-lag=1 是比较柔性的修改,修改的比较慢
--check-interval 检查间隔,默认是1秒
大致步骤:
1. 检查和设置会话变量
2. 会检查设定的值如上面的Threads_connected/Threads_running 如果超过会暂停
3. 检查表信息如主键和触发器
4. 创建一个_表名_new开头的临时表
5. 给临时表做ddl操作
6. 给源表创建pt_osc_库名_表名_del/pt_osc_库名_表名_upd/pt_osc_库名_表名_ins三种dml的触发器
7. 根据主键查看总行数
8. 根据chunk size 查看每批次可以插入的数据(每次插入前,会检查负载情况)
9. 插入完成后,会收集新表统计信息
10 . crs校验源表和新表
11. 最后做rename操作,老表rename成 "_表名_old"
12. 删除所有触发器
