MySQL 伺服器的關機流程可分為六個關鍵階段,理解這些階段有助於資料庫管理員進行優雅關機、排查關機異常以及規劃維護窗口。
第一階段:啟動關機程序
關機可透過多種方式觸發:
- 擁有
SHUTDOWN 權限的使用者執行 mysqladmin shutdown
- Unix 系統接收到
SIGTERM 訊號
- Windows 服務管理器要求服務停止
第二階段:建立關機執行緒
根據觸發方式,伺服器可能建立專門執行緒處理關機:
- 用戶端請求關機 → 建立關機執行緒
- 接收 SIGTERM → 訊號執行緒自行處理或建立獨立執行緒
- 若無法建立執行緒(如記憶體耗盡),錯誤日誌記錄:
Error: Can't create thread to kill server
第三階段:停止接受新連線
為防止新活動啟動,伺服器關閉所有監聽介面:
- TCP/IP 埠
- Unix Socket 檔案
- Windows 命名管道
- Windows 共享記憶體
第四階段:終止現有活動
對每個用戶端連線執行緒:
- 中斷連線,標記為「killed」
- 閒置連線快速終止
- 執行查詢的執行緒定期檢查狀態,終止較慢
- 開啟交易的執行緒 → 交易回滾
- 非交易表更新操作可能導致資料部分更新
複寫相關處理:
- 主伺服器:從伺服器連線執行緒視同一般用戶端處理
- 從伺服器:先停止 I/O 和 SQL 執行緒,SQL 執行緒完成當前陳述式後停止,若在交易中則回滾
第五階段:關閉儲存引擎
- 清空表快取,關閉所有開啟的表
- 各儲存引擎執行專屬清理動作:
- MyISAM:刷新掛起的索引寫入
- InnoDB:將緩衝區刷新至磁碟(除非
innodb_fast_shutdown=2),寫入當前 LSN,終止內部執行緒
第六階段:伺服器退出
完成所有清理工作後,伺服器進程結束。
掌握關機流程細節,有助於制定備份策略、排查資料一致性問題,以及規劃零停機維護作業。