# 進入 bin 目錄執行 ./mysqladmin -u root -p shutdown # 無密碼時 ./mysqladmin -u root shutdown
啟動建議:nohup ./mysqld_safe &(安全模式守護進程)
SIGTERM 或客戶端 shutdown 命令Error: Can't create thread to kill serverKILLED,定期檢查並回滾innodb_fast_shutdown=0/1 時刷新 Buffer Pool 至磁盤,記錄 LSN 至表空間,關閉後台線程| 命令 | 行為 | 適用場景 |
|---|---|---|
KILL CONNECTION thread_id | 回滾事務、釋放鎖、關閉連接 | 常規強制斷開 |
KILL QUERY thread_id | 僅終止當前執行語句,保持連接 | 取消長查詢、誤操作 |
殺死信號檢查點:SELECT 排序循環、ALTER TABLE 拷貝循環、UPDATE/DELETE 逐批次、GET_LOCK()、INSERT DELAY、表鎖等待、磁盤空間不足。警告:REPAIR/OPTIMIZE TABLE 期間 KILL 會導致表損壞。
# 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 shutdownkill -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