1 組合
pt-online-schema-change --user= --password= --host= D=,t= --sock=/tmp/mysql.sock --alter '' --charset=utf8 --alter-foreign-keys-method=auto --max-load='Threads_running=35,Threads_connected=10000' --critical-load='Threads_running=200,Threads_connected=10000' --no-check-replication-filters -recursion-method=none --print --execute
--no-check-replication-filters 不考慮複製過濾規則
-recursion-method=none 不設置默認方法來指定發現從庫,必須顯示指定
--max-load 默認thread_running=25 一旦大於25會暫緩pt任務的執行,可以看情況是否調大,參數格式
2 無法生效情況
1 無任何唯一性索引的表
2 表本身擁有觸發器
3 表本身擁有外鍵(儘量不要使用pt-osc)
4 捕捉到warning級別mysql錯誤(比如1264錯誤)
3 風險情況
1 給表增加唯一性索引時一定要確保該列沒有重複數據,否則會丟失數據
1 利用 count(distinct(c1))的值來判斷
2 原表插入成功,新表有唯一性索引所以插入失敗pt-osc會忽略 這是丟失數據的根本原因
2 可能會有機率觸發死鎖情況
3 消費binlog可能有異常,要及時通知消費端
4 高負載情況下慎用
4 pt-osc強制終止清理
1 kill pt-osc相關進程
2 drop triggers
如果出現MDL鎖要進行MDL鎖定位(一般爲慢查詢導致)
3 確認 triggers刪除後再執行drop _table_new操作