主從切換是資料庫高可用體系的核心操作。本文梳理計畫內優雅切換與主庫突發宕機緊急切換兩大場景的標準化步驟,支援快速決策與執行。
前提:主從同步正常,Seconds_Behind_Master = 0。
FLUSH TABLES WITH READ LOCK;
SHOW PROCESSLIST;
-- 等待出現:Has read all relay log; waiting for the slave I/O thread to update it
STOP SLAVE IO_THREAD;
STOP SLAVE;
RESET MASTER;
RESET SLAVE;
GRANT REPLICATION SLAVE ON *.* TO 'repdcs'@'原主庫IP' IDENTIFIED BY 'replpwd';
GRANT ALL PRIVILEGES ON *.* TO 'repdcs'@'原主庫IP' IDENTIFIED BY 'replpwd';
FLUSH PRIVILEGES;
RESET MASTER;
CHANGE MASTER TO
MASTER_HOST='新主庫IP',
MASTER_USER='repdcs',
MASTER_PASSWORD='replpwd',
MASTER_LOG_FILE='mysqlbin.000015',
MASTER_LOG_POS=XXX;
START SLAVE;
SHOW SLAVE STATUS\G;
SHOW MASTER STATUS\G;
UNLOCK TABLES;
前提:主庫已不可用,無法正常關閉、無法獲取最新 Binlog 位置。
STOP SLAVE;
RESET MASTER;
SHOW SLAVE STATUS\G;
CHANGE MASTER TO
MASTER_HOST='新主庫IP',
MASTER_USER='repdcs',
MASTER_PASSWORD='replpwd',
MASTER_LOG_FILE='mysqlbin.000002',
MASTER_LOG_POS=XXX;
START SLAVE;
| 風險 | 影響 | 對策 |
|---|---|---|
| 主從延遲未歸零切換 | 資料丟失 | 強制等待 Seconds_Behind_Master=0 |
| Binlog 位點錯誤 | 從庫報錯、資料不一致 | 優先用 SHOW MASTER STATUS 獲取精確位點 |
| 應用連線未及時切換 | 寫入舊主庫導致分叉 | 配置中心/服務發現自動化切換 |
| 雙主同時寫入 | 主鍵衝突、資料破壞 | 架構層面保證單點寫入 |
Runbook 文檔,含聯繫人、指令模板、驗證清單rpl_semi_sync_master=ON)降低 RPO