首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

CentOS 7 MySQL 服務啟動失敗?3 分鐘定位真兇:PID 目錄權限缺失

     編輯:MySQL 資料庫相關知識

故障現象


[root@spark01 ~]# /etc/init.d/mysqld start
Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details. [FAILED]

systemctl / journalctl 給出的誤導性信息


systemctl status mysqld.service
# Active: failed (Result: exit-code)
# Process: 2979 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)
# MySQL Daemon failed to start.

journalctl -xe
# Unit mysqld.service has failed.
# The result is failed.
⚠️ systemd 層面只報「啟動失敗」,不會揭示具體業務層原因。

關鍵突破口:MySQL 錯誤日誌


2016-01-20T10:00:19.935771Z 0 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2 - No such file or directory)
2016-01-20T10:00:19.935795Z 0 [ERROR] Can't start server: can't create PID file: No such file or directory

分層排查過程

  1. 目錄不存在: ls -ld /var/run/mysqld/ → 無輸出
  2. 建目錄: mkdir -p /var/run/mysqld/
  3. 再試啟動: 仍失敗,錯誤碼變為 Errcode: 13 - Permission denied
  4. 權限屬主錯誤: ls -ld /var/run/mysqld/ → drwxr-xr-x 2 root root
  5. 修正屬主: chown mysql:mysql /var/run/mysqld/
  6. 啟動成功: /etc/init.d/mysqld start → [ OK ]

根因總結

  • MySQL 啟動需在 pid-file 指定目錄建立 mysqld.pid
  • 目錄缺失或屬主非 mysql 用戶 → 無寫入權限 → 啟動中止
  • 常見於:手動移動 data 目錄、升級後未執行 mysql_install_db、tmpfs 掛載導致重啟後目錄消失

永久修復建議


# 1. 確保 my.cnf 中 pid-file 路徑正確
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid

# 2. 建立 systemd-tmpfiles 規則,重啟自動建目錄並設權限
echo "d /var/run/mysqld 0755 mysql mysql -" > /etc/tmpfiles.d/mysql.conf

# 3. 驗證
systemd-tmpfiles --create /etc/tmpfiles.d/mysql.conf
ls -ld /var/run/mysqld/

核心心法

服務啟動失敗,先看業務日誌,再看系統日誌。
systemd/journalctl 只負責進程生命週期,業務邏輯錯誤(配置、權限、資源)只在應用自身日誌中現身。

延伸排查清單

  • datadir 目錄權限、屬主
  • log-error 指定的錯誤日誌路徑可寫
  • SELinux / AppArmor 是否阻擋
  • 端口 3306 佔用:ss -tlnp | grep 3306
  • 配置語法錯誤:mysqld --validate-config
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved