多種觸發方式:
mysqladmin shutdown(需 SHUTDOWN 權限,跨平台)SIGTERM(kill -TERM pid)net stop mysql 或服務面板停止systemctl stop mysqldError: Can't create thread to kill server,服務器嘗試直接退出。關閉所有監聽端點:
/tmp/mysql.sock)新連接嘗試將立即報錯「Can't connect to MySQL server」。
| 線程類型 | 處理方式 |
|---|---|
| 客戶端連接線程 | 斷開連接,標記 KILLED。空閒線程立即退出;執行查詢線程定期檢查標記,較慢退出 |
| 事務線程 | 自動回滾未提交事務 |
| 非事務表更新 | 部分更新風險:多行 UPDATE/INSERT 可能僅執行部分後被中斷 |
| 主庫復制線程 | 視同普通客戶端線程,標記殺掉退出 |
| 從庫 I/O 線程 | 立即停止 |
| 從庫 SQL 線程 | 允許完成當前語句(避免復制不一致),若在事務中則回滾 |
innodb_fast_shutdown=0(默認):完整刷新緩衝池到磁碟、合併 Change Buffer、寫入當前 LSN → 重啟最快,關閉最慢。innodb_fast_shutdown=1:跳過 Change Buffer 合併、刷新緩衝池 → 平衡。innodb_fast_shutdown=2:僅刷新日志、不刷數據頁 → 關閉最快,重啟需恢復(生產慎用)。進程正常退出,返回碼 0。異常退出會在錯誤日志留下堆棧信息。
kill -9:導致 InnoDB 恢復時間不可控,數據一致性風險。FLUSH TABLES WITH READ LOCK 確保靜態一致性(備份場景)。Innodb_buffer_pool_pages_dirty 變化,預估刷盤時間。innodb_max_dirty_pages_pct 降低髒頁比例,加速關閉。