在 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 啟動時會將詳細信息寫入錯誤日誌(默認 /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 文件。
mkdir -p /var/run/mysqld/
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 用戶無寫入權限。
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 路徑與目錄一致ausearch -m avc)/var/run/mysqld 在重啟後持久化(systemd-tmpfiles 配置)掌握「看應用日誌」這一習慣,能讓運維排查效率提升數倍。