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

Linux MySQL "Daemon failed to start" 啟動失敗完整排查指南

     編輯:MySQL 資料庫相關知識

錯誤現象

# /etc/init.d/mysqld start
MySQL Daemon failed to start.
Starting mysqld: [FAILED]

核心排查步驟:查看錯誤日誌

# 查看 MySQL 錯誤日誌 (路徑可能不同)
less /var/log/mysqld.log
# 或
less /var/lib/mysql/主機名.err

典型錯誤輸出

mysqld started
[Warning] Can't create test file xxx.lower-test
[Warning] Can't create test file xxx.lower-test
/usr/libexec/mysqld: Can't change dir to '/xxx' (Errcode: 13)
[ERROR] Aborting

關鍵錯誤碼解析:Errcode 13

Errcode 13 = Permission denied (權限被拒絕)

MySQL 進程無法存取數據目錄或無法建立臨時測試文件。

排查清單 (按可能性排序)

1. 目錄權限與所有者檢查 (最常見)

# 檢查數據目錄權限
ls -ld /var/lib/mysql
# 應為 mysql:mysql 且 750/755 權限

# 修正權限
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql

2. SELinux 阻攔 (CentOS/RHEL 典型問題)

# 檢查 SELinux 狀態
getenforce
# 輸出 Enforcing 表示啟用

# 臨時關閉 (立即生效,重啟失效)
setenforce 0

# 永久關閉 (需重啟)
# 編輯 /etc/selinux/config
SELINUX=disabled

# 或針對性放行 (推薦)
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -Rv /var/lib/mysql

3. 數據目錄路徑配置錯誤

# 檢查 my.cnf 配置
grep datadir /etc/my.cnf
# 確認路徑存在且正確

# 常見錯誤:datadir 指向不存在的目錄
datadir=/xxx  # 此目錄不存在

4. 磁盤空間耗盡

df -h /var/lib/mysql
# 可用空間不足 10% 會導致啟動失敗

5. 端口衝突

netstat -tlnp | grep 3306
# 若被佔用,kill 掉進程或修改 my.cnf port

6. 殘留鎖文件

# 檢查並清理
ls -la /var/lib/mysql/*.pid /var/lib/mysql/*.sock
rm -f /var/lib/mysql/*.pid /var/lib/mysql/*.sock

完整修復流程範例 (SELinux 場景)

# 1. 確認錯誤日誌顯示 Errcode 13
# 2. 檢查權限正常
ls -ld /var/lib/mysql
# drwxr-x---. 56 mysql mysql 4096 Jun 10 10:00 /var/lib/mysql

# 3. 確認 SELinux 啟用
getenforce
# Enforcing

# 4. 方案 A:永久關閉 SELinux (簡單粗暴)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
reboot

# 方案 B:正確配置 SELinux 上下文 (推薦生產環境)
yum install -y policycoreutils-python
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -Rv /var/lib/mysql
systemctl start mysqld

驗證啟動成功

systemctl status mysqld
# 或
service mysqld status

# 測試連線
mysql -u root -p -e "SELECT VERSION();"

預防性維護建議

  • 部署自動化腳本統一設置目錄權限與 SELinux 上下文
  • 監控磁盤空間,設定告警閾值 80%
  • 定期備份 my.cnf 配置檔
  • 使用 systemd 管理服務 (CentOS 7+),避免 init.d 腳本問題

快速參考:常見 Errcode 對照

Errcode含義典型原因
13Permission denied目錄權限、SELinux、所有者錯誤
2No such file or directorydatadir 路徑錯誤、socket 文件缺失
28No space left on device磁盤滿、inode 耗盡
98Address already in use端口 3306 被佔用
111Connection refusedMySQL 未啟動、bind-address 配置錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved