三大操作對照表
| 操作 | systemd (現代 Linux) | SysV init 傳統 | 官方工具 |
| 啟動 | systemctl start mysqld / service mysqld start | /etc/init.d/mysqld start | mysqld_safe & |
| 停止 | systemctl stop mysqld / service mysqld stop | /etc/init.d/mysqld stop | mysqladmin shutdown |
| 重啟 | systemctl restart mysqld / service mysqld restart | /etc/init.d/mysqld restart | (無專用指令) |
官方推薦:mysqld_safe
- 官方提供的守護啟動腳本,會在背景持續監控
mysqld 進程。
- 若進程意外退出(OOM、Segment Fault、誤殺),
mysqld_safe 會自動重啟,保障高可用。
- 支援將錯誤日誌導向指定檔案:
mysqld_safe --log-error=/var/log/mysql/error.log &
各指令適用場景
| 場景 | 建議指令 | 理由 |
| 生產環境日常管理 | systemctl / service | 整合系統服務管理,支援開機自啟、狀態查詢、日誌整合 |
| 容器/極簡環境 | mysqld_safe | 無 systemd,需自我守護重啟 |
| 腳本/自動化關機 | mysqladmin shutdown | 走 MySQL 協議優雅關閉,觸發 checkpoint、刷新 buffer pool |
| 緊急強制停止 | kill -TERM $(pidof mysqld) | 最後手段,可能導致崩潰恢復時間變長 |
常見坑點
- 雙重啟動:同時用
systemctl start 與 mysqld_safe 會衝突,擇一使用。
- 權限不足:非 root 執行
systemctl 需 sudo;mysqladmin 需帳號密碼或 .my.cnf 配置。
- 配置檔生效:修改
my.cnf 後必須 重啟(非 reload)才能生效靜態參數。
驗證啟動狀態
systemctl status mysqld # systemd
service mysqld status # SysV
mysqladmin -u root -p ping # 協議層檢查,回傳 "mysqld is alive"
ps aux | grep mysqld # 進程層確認
總結
現代 Linux 首選 systemctl 管理 MySQL 服務;容器或無 systemd 環境用 mysqld_safe 享受自動守護重啟;腳本化關機用 mysqladmin shutdown 優雅收尾。三種體系各有適用場景,切勿混用。