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

CentOS 7 MySQL 啟動失敗排查實戰:從 systemctl 到錯誤日誌的定界思維

     編輯:MySQL 綜合教學

CentOS 7 MySQL 啟動失敗排查實戰:從 systemctl 到錯誤日誌的定界思維

systemctl start mysqld 報 Job for mysqld.service failed,systemctl status 與 journalctl -xe 卻只給出通用的 exit-code。本文實戰演示「跳過 systemd、直達錯誤日誌」的定界方法論,秒級定位 PID 文件權限、目錄缺失、SELinux、配置語法等高頻啟動失敗根因。

現場還原:systemctl 輸出的迷霧


[root@spark01 ~]# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

[root@spark01 ~]# systemctl status mysqld.service
● mysqld.service - SYSV: MySQL database server.
   Active: failed (Result: exit-code) since Wed 2016-01-20 18:26:57 CST
  Process: 2979 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)
  Jan 20 18:26:57 spark01 mysqld[2979]: MySQL Daemon failed to start.
  Jan 20 18:26:57 spark01 mysqld[2979]: Starting mysqld: [FAILED]

痛點: systemd 只知道「啟動腳本返回非 0」,完全看不見 MySQL 內核為什麼起不來。

破局關鍵:MySQL 錯誤日誌


# 1. 找日誌路徑(默認 datadir 下 *.err)
[root@spark01 ~]# cat /var/lib/mysql/spark01.err
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

分級定界與修復

錯誤碼現象根因修復命令驗證
Errcode: 2No such file or directoryPID 目錄 /var/run/mysqld/ 不存在mkdir -p /var/run/mysqld/ls -ld /var/run/mysqld/
Errcode: 13Permission denied目錄屬主為 root,mysqld 用戶無寫權限chown mysql:mysql /var/run/mysqld/ls -ld /var/run/mysqld/
Errcode: 13datadir 權限/var/lib/mysql 屬主非 mysqlchown -R mysql:mysql /var/lib/mysqlls -ld /var/lib/mysql
SELinux啟動無報錯但端口不聽策略阻止 mysqld 寫入/綁定setsebool -P mysql_connect_any=1 或 semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" + restorecon -Rv /data/mysqlausearch -m avc -ts recent
配置語法[ERROR] unknown variablemy.cnf 參數拼寫錯/版本不支持mysqld --help --verbose 2>&1 | grep -i unknown 定位mysqld --validate-config (8.0+)
端口衝突[ERROR] Do you already have another mysqld server running?3306 被佔用/殘留進程lsof -i:3306 / pkill -9 mysqldnetstat -antp | grep 3306

通用排查 SOP(標準作業程序)

  1. 看錯誤日誌: tail -50 $(grep 'log-error' /etc/my.cnf | cut -d= -f2) —— 永遠第一步
  2. 核權限: datadir、pid-file、socket、log-error 目錄屬主均為 mysql:mysql
  3. 查 SELinux: getenforce → Enforcing 時必查 ausearch -m avc -c mysqld
  4. 驗配置: mysqld --help --verbose 2>&1 | head -20 檢查參數識別
  5. 測試啟動: mysqld --user=mysql --console 前台運行,直接看標準錯誤輸出

思維升級:為什麼 systemd 不夠用?

  • systemd 管理的是「服務單元生命周期」,不懂業務語義(PID 文件、InnoDB 恢復、Binlog 校驗)
  • MySQL 啟動腳本 /etc/init.d/mysqld 只是薄封裝,真正干活的是 mysqld_safe → mysqld
  • 黃金法則: 服務啟動失敗,**首選業務日誌,次選系統日誌,最後才看 systemd 狀態**。

掌握「直達錯誤日誌」定界思維,CentOS 7/MySQL 8.0/任何 systemd 管理的服務,啟動故障排查都將從「盲人摸象」變為「順藤摸瓜」。

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