當主從同步因各種原因導致資料不一致,且常規修復方法難以徹底解決時,重置主從服務雖非最快,但最安全有效。
STOP SLAVE;
FLUSH TABLES WITH READ LOCK;
或停止 Web 服務(Apache/Nginx)達到同樣效果。
mysqldump -u root -p --databases db1 db2 > bak.sql
RESET MASTER;
此指令會刪除所有二進制日誌,僅保留一個空的 .000001 日誌檔。注意:執行此指令會導致 Slave 找不到原 binlog,同步中斷,但這正是重置同步所需。
UNLOCK TABLES;
scp -r root@Master_IP:/root/bak.sql ./
DROP DATABASE db1;
DROP DATABASE db2;
SOURCE /root/bak.sql;
RESET SLAVE;
此指令會清除同步位置、刪除舊 relay log、建立新 relay log。必須先執行 STOP SLAVE(步驟 1 已完成)。
START SLAVE;
SHOW SLAVE STATUS\G
確認 Slave_IO_Running 與 Slave_SQL_Running 均為 Yes 即表示同步正常。