MySQL 重啟看似簡單,但不當操作(如 kill -9)極易導致數據損壞、表損壞、甚至無法啟動。本文詳細說明源碼安裝、系統服務、Windows 等不同場景下的安全重啟標準流程。
kill -9 mysqld_pid:強制終止,InnoDB 無法執行崩潰恢復,數據頁可能損壞killall mysql:同樣危險優雅關閉:讓 MySQL 完成棄點寫入、釋放鎖、關閉表、寫入關閉標記,再啟動。
# 1. 進入 MySQL 安裝目錄 bin 目錄
cd /usr/local/mysql/bin
# 2. 優雅關閉(推薦:mysqladmin shutdown)
./mysqladmin -u root -p shutdown
# 輸入密碼後等待進程退出,通常 5-30 秒視數據量而定
# 3. 確認進程已停止
ps -ef | grep mysqld
# 無輸出表示已停止
# 4. 啟動
./mysqld_safe --user=mysql &
# 5. 驗證啟動成功
./mysqladmin -u root -p ping
# 輸出 "mysqld is alive" 表示正常
mysqladmin shutdown:發送 SHUTDOWN 信號,觸發 InnoDB 正常關閉流程(刷新緩衝池、寫入 redo log、棄點)mysqld_safe:啟動腳本,自動監控進程、重啟崩潰進程、重定向錯誤日志&:後台運行./mysqld & 直接啟動,缺少安全監控# 重啟
systemctl restart mysqld
# 或
systemctl restart mysql
# 停止
systemctl stop mysqld
# 啟動
systemctl start mysqld
# 狀態查看
systemctl status mysqld
# 開機自啟
systemctl enable mysqld
# 重啟
service mysqld restart
# 或
/etc/init.d/mysqld restart
# 停止/啟動
service mysqld stop
service mysqld start
REM 停止服務
net stop mysql
REM 啟動服務
net start mysql
REM 重啟(組合)
net stop mysql && net start mysql
services.msc圖形界面提供「Start/Stop/Restart」按鈕,適合開發環境。
# 重啟容器
docker restart mysql-container-name
# 或停止+啟動
docker stop mysql-container-name
docker start mysql-container-name
# 進入容器執行 mysqladmin shutdown(優雅關閉)
docker exec mysql-container-name mysqladmin -uroot -p shutdown
docker start mysql-container-name
□ 確認無長時間運行事務:SHOW ENGINE INNODB STATUS \G 看 History list length
□ 確認無大量臨時表/文件排序:SHOW PROCESSLIST
□ 通知業務方/配置讀寫分離切換流量
□ 備份關鍵數據(或確認主從同步正常)
□ 記錄重啟原因、時間、操作人
□ 準備回滾方案(如配置文件備份)
| 現象 | 可能原因 | 排查步驟 |
|---|---|---|
| shutdown 後進程不退出 | 長事務回滾、大緩衝池刷新 | SHOW ENGINE INNODB STATUS 觀察 Log sequence number 推進;耐心等待,勿 kill -9 |
| mysqld_safe 啟動後即退出 | 配置錯誤、端口衝突、權限問題、數據目錄損壞 | 查看錯誤日志 tail -f /var/log/mysqld.log 或 /usr/local/mysql/data/hostname.err |
| 啟動報 "Can't start server: Bind on TCP/IP port" | 端口被佔用、殘留進程 | netstat -tlnp | grep 3306,kill 殘留進程 |
| InnoDB: Error: log file size mismatch | 修改了 innodb_log_file_size 未刪除舊日志文件 | 停止服務,刪除 ib_logfile*,重啟 |
MySQL 安全重啟三部曲:mysqladmin shutdown → 確認進程退出 → mysqld_safe & (或 systemctl restart)。拒絕暴力 kill,尊重數據庫的關閉協議,是運維的底線。