在 MySQL replication 發生錯誤後,需要一邊 skip replication error,一邊跑 pt-table-sync 強制資料庫同步:
while true; do ( echo 'SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;' | mysql -h $1 ) || sleep 1; done
那個 sleep 1
的設計是用在「如果 replication 正常,停一下再跑一次」的前提下而設計的;如果不需要的話拿掉也是 okay 的。
要注意,能這樣跑的前提是 max_connect_errors
要開超大,我是設成 max_connect_errors = 4294967295
。
可是這樣就要冒著 slave 和 master 最後資料會不一樣的結果...
我覺得把可以容忍的錯誤,放在 my.cnf 的 slave-skip-errors=xxxx,其餘錯誤,還是人工處理比較妥當。
這是跑 pt-table-sync 的時候用的,不會有你說的問題。