萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 服務器關機流程深度解析:六階段關閉機制與線程終止細節

關機六階段模型

  1. 啟動關閉進程:mysqladmin shutdown(需 SHUTDOWN 權限)、Unix SIGTERM、Windows 服務管理器停止命令。
  2. 創建關閉線程:根據觸發方式創建專用線程處理關閉邏輯;內存不足無法創建線程時記錄錯誤 Error: Can't create thread to kill server。
  3. 停止接受新連接:關閉所有監聽端點(TCP/IP 3306、Unix Socket、Windows Named Pipe、Shared Memory)。
  4. 終止當前活動:
    • 斷開客戶端連接,線程標記 Killed。
    • 空閒線程立即退出;活躍查詢線程定期檢查標記退出。
    • 進行中事務**回滾**;非事務表(MyISAM)多行 UPDATE/INSERT 可能**部分執行**導致數據不一致。
    • 主庫:從庫連接線程同樣標記殺掉退出。
    • 從庫:先停止 I/O 和 SQL 線程,SQL 線程完成當前語句後停止(避免復制斷點不一致),事務中則回滾。
  5. 存儲引擎關閉:
    • 清空表緩存,關閉所有打開表。
    • MyISAM:刷新掛起索引寫入。
    • InnoDB:刷新緩衝池至磁盤(除非 innodb_fast_shutdown=2),寫入當前 LSN,終止內部線程(主線程、清理線程等)。
  6. 服務器進程退出:返回作業系統。

關鍵參數:innodb_fast_shutdown

值行為適用場景
0 (默認)完整刷新緩衝池、合併插入緩衝、刷新 Redo Log常規關機,啟動最快
1僅刷新 Redo Log,不合併插入緩衝較快關機,啟動需合併
2直接退出,**不刷新緩衝池**緊急關機,**啟動需執行崩潰恢復,耗時最長**

運維啟示

  • 避免在大事務運行時強制關機(數據不一致風險)。
  • 主從切換前確保從庫 SQL 線程處理完所有 Relay Log(STOP SLAVE SQL_THREAD 等待 Relay_Log_Space 停止增長)。
  • 監控關機耗時,超時預警(InnoDB 刷新大緩衝池可能數分鐘)。
  • 配置 innodb_max_dirty_pages_pct 降低髒頁比例,縮短正常關機時間。
copyright © 萬盛學電腦網 all rights reserved