首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL service mysqld vs mysql 啟動命令差異:版本、發行版與系統服務管理

     編輯:程式設計綜合問答

直接回答

服務名稱取決於安裝包類型、Linux 發行版、MySQL 版本,無絕對標準。常見映射:

場景服務名命令示例
官方 RPM 包 (RHEL/CentOS 6/7, MySQL 5.6/5.7/8.0) mysqld service mysqld start / systemctl start mysqld
官方 DEB 包 (Ubuntu/Debian, MySQL 5.7/8.0) mysql service mysql start / systemctl start mysql
MariaDB (大多數發行版) mariadb 或 mysql systemctl start mariadb
Percona Server mysql service mysql start
Docker 容器 無服務名 docker start <container>
Windows 服務顯示名 "MySQL" net start MySQL80 / sc start MySQL80

如何確認當前系統的正確服務名

# systemd 系統
systemctl list-unit-files | grep -i mysql
systemctl list-unit-files | grep -i mariadb

# SysVinit 系統
ls /etc/init.d/ | grep -i mysql
chkconfig --list | grep -i mysql

# 通用:查看進程名
ps -ef | grep mysqld
# 進程名通常是 mysqld,但服務腳本名可能不同

為什麼會有兩個名稱?

  • 歷史原因:早期 MySQL 官方 RPM 包服務腳本命名為 mysqld (daemon 進程名)。
  • Debian/Ubuntu 維護者習慣命名為 mysql (項目名)。
  • systemd 時代:.service 文件名即服務名,由打包者決定。

最佳實踐

  1. 腳本中動態檢測:
    SERVICE_NAME=$(systemctl list-unit-files | grep -E 'mysql|mariadb|mysqld' | head -1 | awk '{print $1}')
    systemctl start "$SERVICE_NAME"
    
  2. 使用 mysqladmin 檢查服務狀態,不依賴服務名:
    mysqladmin ping --silent && echo "Running" || echo "Stopped"
    
  3. Docker 部署時直接管理容器,忽略宿主機服務名。

總結

service mysql restart 可行而 service mysqld restart 失敗,說明你的系統 (可能是 Ubuntu/Debian/Percona) 註冊的服務名為 mysql。請以 systemctl list-unit-files 實際輸出為準,勿死記名稱。

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