首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

CentOS 7 MySQL 啟動失敗排查實戰:從 PID 文件權限到日誌分析

     編輯:MySQL 綜合教學

故障現象

在 CentOS 7 上執行 systemctl start mysqld 或 /etc/init.d/mysqld start 時報錯:

Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

常規排查為何失效

systemctl status mysqld.service 與 journalctl -xe 僅顯示「MySQL Daemon failed to start」,未給出具體原因。這是因為 systemd 只捕獲服務進程的退出碼,不包含 MySQL 內部啟動過程的詳細錯誤。

關鍵突破:查閱 MySQL 錯誤日誌

MySQL 啟動時會將詳細信息寫入錯誤日誌(默認 /var/log/mysqld.log)。打開日誌發現:

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

根因:/var/run/mysqld/ 目錄不存在,導致無法創建 PID 文件。

分步解決

  1. 創建目錄:
    mkdir -p /var/run/mysqld/
  2. 嘗試啟動,再次報錯:
    2016-01-20T10:28:37.183387Z 0 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13 - Permission denied)

    目錄屬主仍為 root,mysql 用戶無寫入權限。

  3. 修正權限並啟動:
    chown mysql:mysql /var/run/mysqld/
    systemctl start mysqld   # 或 /etc/init.d/mysqld start
    # 輸出:Starting mysqld (via systemctl):  [ OK ]

核心經驗總結

服務啟動失敗時,優先查看應用自身的錯誤日誌,而非僅依賴 systemd/journalctl。 系統級日誌往往只反映「進程退出」,應用日誌才揭示「為何退出」。

此案例中,MySQL 錯誤日誌直接指向「目錄缺失」→「權限不足」,兩步定位解決。同理適用於 Nginx、Redis、Docker 等服務排查。

延伸檢查清單

  • 確認 my.cnf 中 pid-file 路徑與目錄一致
  • 檢查 SELinux/AppArmor 是否阻擋目錄訪問(ausearch -m avc)
  • 驗證 /var/run/mysqld 在重啟後持久化(systemd-tmpfiles 配置)

掌握「看應用日誌」這一習慣,能讓運維排查效率提升數倍。

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