首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 安全關閉完全指南:優雅停機流程與緊急處理方案

     編輯:MySQL 資料庫相關知識

標準關閉命令

# 進入 bin 目錄執行
./mysqladmin -u root -p shutdown

# 無密碼時
./mysqladmin -u root shutdown

啟動建議:nohup ./mysqld_safe &(安全模式守護進程)

MySQL 關閉內部流程深度解析

  1. 信號接收:收到 SIGTERM 或客戶端 shutdown 命令
  2. 關閉線程創建:客戶端發起創建專用線程;信號觸發由信號處理線程或新建線程處理。內存不足時會報 Error: Can't create thread to kill server
  3. 拒絕新連接:關閉 TCP/IP 監聽、Unix Socket、Named Pipe 等所有接入通道
  4. 逐步斷開現有連接:
    • 空閒連接(Sleep)立即終止
    • 活躍事務連接標記 KILLED,定期檢查並回滾
    • 非事務表已修改數據無法回滾,可能產生部分更新
  5. 復制線程處理:
    • Master:同等對待普通線程
    • Slave:先停 IO 線程,再停 SQL 線程。5.0.81+ 等待事務結束再關閉(舊版本直接回滾)
  6. 存儲引擎關閉:
    • 刷新 Table Cache,關閉所有打開表
    • MyISAM:刷新所有待寫數據
    • InnoDB:innodb_fast_shutdown=0/1 時刷新 Buffer Pool 至磁盤,記錄 LSN 至表空間,關閉後台線程
  7. 進程退出

KILL 命令精準控制

命令行為適用場景
KILL CONNECTION thread_id回滾事務、釋放鎖、關閉連接常規強制斷開
KILL QUERY thread_id僅終止當前執行語句,保持連接取消長查詢、誤操作

殺死信號檢查點:SELECT 排序循環、ALTER TABLE 拷貝循環、UPDATE/DELETE 逐批次、GET_LOCK()、INSERT DELAY、表鎖等待、磁盤空間不足。警告:REPAIR/OPTIMIZE TABLE 期間 KILL 會導致表損壞。

生產環境優雅關閉標準作業程序 (SOP)

# 0. 使用高權限賬號,優先 Unix Socket 連接
mysql -u root -p -S /tmp/mysql.sock

# 1. 允許快速關閉(非升級場景)
SET GLOBAL innodb_fast_shutdown = 1;

# 2. 強制刷髒頁
SET GLOBAL innodb_max_dirty_pages_pct = 0;
-- 監控 SHOW ENGINE INNODB STATUS 直到 History list length < 500
-- 且 Log sequence number ≈ Log flushed up to ≈ Last checkpoint at

# 3. 限制新連接
SET GLOBAL max_connections = 1;
SET GLOBAL max_user_connections = 1;

# 4. 清理空閒連接
KILL <id> FOR SELECT id, user, host, time, state FROM information_schema.processlist 
WHERE command = 'Sleep' AND time > 1;

# 5. 確認無長事務/大 DDL
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;

# 6. 全局鎖表並刷新(不記錄 Binlog)
FLUSH LOCAL TABLES;

# 7. Slave 專用:先停 IO,待 Relay Log 應用完再停 SQL
STOP SLAVE IO_THREAD;
-- 等待 Seconds_Behind_Master = 0
STOP SLAVE SQL_THREAD;

# 8. 最終關閉
mysqladmin -u root -p shutdown

緊急情況處理

  • 極速關閉:SET GLOBAL innodb_fast_shutdown = 1; mysqladmin shutdown
  • OS 層強殺:kill -TERM $(pidof mysqld) → 等待 30s → kill -9(最後手段)
  • 風險提示:innodb_flush_log_at_trx_commit=0 時強殺會丟失事務;重啟會觸發 Crash Recovery,耗時與 Redo Log 髒頁量成正比

核心監控指標

-- 關閉前必看
SHOW ENGINE INNODB STATUS\G
-- 關鍵指標:
-- History list length < 500 (未 Purge 事務少)
-- Log sequence number = Log flushed up to = Last checkpoint at (無未刷盤 Redo)
-- Buffer pool dirty pages % ≈ 0
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved