MySQL 服務管理是運維基礎技能。本文整理 Linux(Systemd、SysVinit、mysqld_safe)與 Windows(服務管理、命令列、圖形介面)下的所有啟停重方式,並補充系統服務註冊與開機自啟配置。
# 啟動
sudo systemctl start mysqld
# 或
sudo systemctl start mysql
# 停止
sudo systemctl stop mysqld
# 重啟
sudo systemctl restart mysqld
# 狀態檢查
sudo systemctl status mysqld
# 開機自啟
sudo systemctl enable mysqld
# 禁用開機自啟
sudo systemctl disable mysqld
# service 命令
sudo service mysqld start
sudo service mysqld stop
sudo service mysqld restart
sudo service mysqld status
# 或直接呼叫 init.d 腳本
sudo /etc/init.d/mysqld start
sudo /etc/init.d/mysqld stop
sudo /etc/init.d/mysqld restart
# 前台安全模式啟動(會自動重啟崩潰進程)
sudo mysqld_safe --user=mysql &
# 跳過權限表啟動(重設 root 密碼時用)
sudo mysqld_safe --skip-grant-tables --user=mysql &
# 需要有效帳號密碼
mysqladmin -u root -p shutdown
# CentOS/RHEL
cp /usr/share/mysql/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# Ubuntu/Debian
update-rc.d mysql defaults
services.msc → 找到 MySQL / MySQL80 → 右鍵「啟動/停止/重新啟動」# 啟動
net start mysql
net start MySQL80
# 停止
net stop mysql
# 重啟
net stop mysql && net start mysql
# sc 命令(更底層)
sc start mysql
sc stop mysql
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
# 啟動(前台,關閉視窗即停止)
mysqld --console
# 安全模式啟動(後台)
mysqld_safe --console &
# 關閉
mysqladmin -u root -p shutdown
# 以管理員身份執行
# 註冊服務(安裝時通常自動完成)
mysqld --install MySQL80 --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
# 移除服務
sc delete MySQL80
# 或
mysqld --remove MySQL80
| 現象 | 可能原因 | 排查步驟 |
|---|---|---|
| 啟動失敗,無錯誤日誌 | 權限、配置檔路徑、端口佔用 | 檢查 mysqld --console 前台輸出;netstat -an | findstr 3306 |
| Can't connect to MySQL server on 'localhost' | Socket 路徑不匹配、服務未啟動 | 改用 127.0.0.1;檢查 my.cnf socket 參數;建立軟連結 |
| InnoDB: Unable to lock ./ibdata1 | 另一實例正在運行、殘留進程 | ps aux | grep mysql → kill -9 → 刪除 .pid 檔 |
| Access denied for user 'root'@'localhost' | 密碼錯誤、權限表損壞 | 用 --skip-grant-tables 重設密碼 |
mysqld_safe 導致進程孤兒。my.cnf 中設定 pid-file、socket、datadir 絕對路徑,防止多實例衝突。mysqladmin -u root -p status 確認連線正常。ibdata1、ib_logfile*、.frm/.ibd 檔案。