首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux 下 MySQL 安全重啟完整指南:源碼安裝與服務管理

     編輯:MySQL 綜合教學

前言

MySQL 重啟看似簡單,但不當操作(如 kill -9)極易導致數據損壞、表損壞、甚至無法啟動。本文詳細說明源碼安裝、系統服務、Windows 等不同場景下的安全重啟標準流程。

核心原則

🚫 絕對禁止

  • kill -9 mysqld_pid:強制終止,InnoDB 無法執行崩潰恢復,數據頁可能損壞
  • killall mysql:同樣危險
  • 直接拔電源/重啟服務器

✅ 核心原則

優雅關閉:讓 MySQL 完成棄點寫入、釋放鎖、關閉表、寫入關閉標記,再啟動。

場景一:源碼編譯安裝(無 systemd 服務)

標準重啟流程

# 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 & 直接啟動,缺少安全監控

場景二:系統包管理器安裝(systemd / SysVinit)

systemd 系統(CentOS 7+, Ubuntu 16.04+, Debian 8+)

# 重啟
systemctl restart mysqld
# 或
systemctl restart mysql

# 停止
systemctl stop mysqld

# 啟動
systemctl start mysqld

# 狀態查看
systemctl status mysqld

# 開機自啟
systemctl enable mysqld

SysVinit 系統(舊版 CentOS 6, Ubuntu 14.04)

# 重啟
service mysqld restart
# 或
/etc/init.d/mysqld restart

# 停止/啟動
service mysqld stop
service mysqld start

場景三:Windows 環境

命令行(管理員權限)

REM 停止服務
net stop mysql

REM 啟動服務
net start mysql

REM 重啟(組合)
net stop mysql && net start mysql

服務管理器 (services.msc)

  1. Win+R → services.msc
  2. 找到 MySQL 或 MySQL80 服務
  3. 右鍵 → 重新啟動

MySQL Installer / Workbench

圖形界面提供「Start/Stop/Restart」按鈕,適合開發環境。

場景四:Docker 容器化部署

# 重啟容器
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,尊重數據庫的關閉協議,是運維的底線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved