正確關閉 MySQL 能保證數據零丟失、減少啟動恢復時間。本文詳細拆解 mysqld 關閉階段,給出生產環境標準操作步驟(SOP)與緊急降級方案。
SIGTERM 或客戶端 SHUTDOWN 命令。Can't create thread to kill server)。KILLED,等待回滾(非事務表修改不可回滾)。innodb_fast_shutdown 控制)。KILL CONNECTION:回滾事務,釋放資源,斷開連接。KILL QUERY:僅終止當前語句,保持連接與事務。mysql -u root -p -S /tmp/mysql.sock。SET GLOBAL innodb_fast_shutdown = 1;(快速關閉,不做 full purge/merge)。升級/降級版本時設為 0。SET GLOBAL innodb_max_dirty_pages_pct = 0;(強制刷髒頁,縮短關閉時間)。SET GLOBAL max_connections = 1; SET GLOBAL max_user_connections = 1;(僅保留當前連接)。KILL 所有 Sleep 且 Time > 1 的閒置線程。SHOW PROCESSLIST 確認無長事務、大查詢、DDL、大範圍 UPDATE。SHOW ENGINE INNODB STATUS 確認 History list length < 500,且 Log sequence number = Log flushed up to = Last checkpoint at(LSN 已刷盤)。FLUSH LOCAL TABLES(刷新表緩存,不寫 binlog)。STOP SLAVE IO_THREAD,待 Relay Log 全應用後 STOP SLAVE SQL_THREAD。mysqladmin shutdown。SET GLOBAL innodb_fast_shutdown = 1; mysqladmin shutdown(跳過髒頁刷盤,啟動時做 Crash Recovery)。kill -TERM (等同 mysqladmin shutdown)。kill -9 (強制殺進程,innodb_flush_log_at_trx_commit=0 時可能丟失最近事務),啟動觸發 Crash Recovery,耗時較長。常規場景 mysqladmin shutdown 足夠;遇阻塞按 SOP 排查;極端情況用 innodb_fast_shutdown=1 + kill -TERM,權衡恢復時間與數據安全。建議將 SOP 固化為運維手冊,定期演練。