Ubuntu 透過 Upstart 管理服務,MySQL 安裝後預設開機自啟。單純修改 /etc/rc*.d/ 連結 (System V 相容層) 無效,必須修改 Upstart 設定檔 /etc/init/mysql.conf。本文提供雙重封鎖方案,確保 MySQL 完全不隨系統啟動。

/etc/init//etc/rc*.d/ 為 System V 相容層,update-rc.d 僅操作此層start on 條件,相容層設定會被覆蓋# 方法一:標準指令
sudo update-rc.d -f mysql remove
# 方法二:手動改名 (S→K)
# mv /etc/rc2.d/S20mysql /etc/rc2.d/K20mysql (依實際編號調整)
# 方法三:使用圖形工具 bum (Boot-Up Manager)
sudo apt-get install bum
sudo bum
sudo vim /etc/init/mysql.conf
找到 start on 區塊:
start on (net-device-up
and local-filesystems
and runlevel [2345])
stop on runlevel [016]
修改為以下任一種:
| 策略 | 修改內容 | 效果 |
|---|---|---|
| 僅禁止 runlevel 2 (預設圖形介面) | runlevel [345] |
文字模式 (runlevel 3/4/5) 仍可啟動 |
| 完全禁止所有 runlevel | runlevel [!0123456] |
無任何 runlevel 符合,開機不啟動 |
| 註解整個 start on 區塊 | # start on ... |
移除所有啟動條件,最徹底 |
建議採用 完全禁止 或 註解 策略。
# 重新載入 Upstart 設定
sudo initctl reload-configuration
# 檢查服務狀態
sudo initctl list | grep mysql
# 應顯示 stop/waiting
# 重開機驗證
sudo reboot
systemctl status mysql # 或 service mysql status
# 應為 inactive (dead)
# 禁止開機自啟
sudo systemctl disable mysql
# 立即停止
sudo systemctl stop mysql
# 檢查狀態
sudo systemctl status mysql
# 輸出應含 Loaded: loaded (/lib/systemd/system/mysql.service; disabled)
# Upstart
sudo sed -i 's/^# start on/start on/' /etc/init/mysql.conf
sudo initctl reload-configuration
# systemd
sudo systemctl enable mysql
雙重封鎖策略確保 MySQL 在任何啟動管理機制下均不會自動啟動,適合資源受限環境、手動控管資料庫啟動時機的生產部署場景。