首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從切換(故障轉移)操作手冊:正常切換與緊急故障兩大場景

     編輯:MySQL 綜合教學

MySQL 主從切換(故障轉移)操作手冊:正常切換與緊急故障兩大場景

主從切換是資料庫高可用體系的核心操作。本文梳理計畫內優雅切換與主庫突發宕機緊急切換兩大場景的標準化步驟,支援快速決策與執行。

場景一:正常計畫切換(維護、升級、遷移)

前提:主從同步正常,Seconds_Behind_Master = 0。

  1. 鎖定主庫寫入(可選,視業務容忍度)
    FLUSH TABLES WITH READ LOCK;
  2. 確認從庫已追上全部 Relay Log
    SHOW PROCESSLIST;
    -- 等待出現:Has read all relay log; waiting for the slave I/O thread to update it
  3. 停止從庫 I/O 線程
    STOP SLAVE IO_THREAD;
  4. 在從庫(即將升級為新主)執行
    STOP SLAVE;
    RESET MASTER;
    RESET SLAVE;
  5. 重啟 MySQL 服務(確保配置生效)
  6. 新主庫建立複寫帳號
    GRANT REPLICATION SLAVE ON *.* TO 'repdcs'@'原主庫IP' IDENTIFIED BY 'replpwd';
    GRANT ALL PRIVILEGES ON *.* TO 'repdcs'@'原主庫IP' IDENTIFIED BY 'replpwd';
    FLUSH PRIVILEGES;
  7. 原主庫(現為從庫)重新指向新主
    RESET MASTER;
    CHANGE MASTER TO 
      MASTER_HOST='新主庫IP',
      MASTER_USER='repdcs',
      MASTER_PASSWORD='replpwd',
      MASTER_LOG_FILE='mysqlbin.000015',
      MASTER_LOG_POS=XXX;
  8. 啟動從庫並驗證
    START SLAVE;
    SHOW SLAVE STATUS\G;
    SHOW MASTER STATUS\G;
  9. 修改應用連線配置指向新主庫
  10. 解鎖原主庫(若步驟1加鎖)
    UNLOCK TABLES;

場景二:主庫突發宕機(緊急故障轉移)

前提:主庫已不可用,無法正常關閉、無法獲取最新 Binlog 位置。

  1. 在備機(從庫)強制升級為主
    STOP SLAVE;
    RESET MASTER;
  2. 檢查從庫狀態確認無錯誤
    SHOW SLAVE STATUS\G;
  3. 修改應用連線配置指向備機
  4. (事後)原主庫恢復上線時,重新配置為從庫
    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 獲取精確位點
應用連線未及時切換寫入舊主庫導致分叉配置中心/服務發現自動化切換
雙主同時寫入主鍵衝突、資料破壞架構層面保證單點寫入

生產建議

  • 引入 **MHA、Orchestrator、GTID + ProxySQL** 實現自動化故障轉移
  • 定期演練切換流程,記錄耗時與問題
  • 建立 Runbook 文檔,含聯繫人、指令模板、驗證清單
  • 關鍵業務採用**同步複寫**(rpl_semi_sync_master=ON)降低 RPO
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved