# /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 = Permission denied (權限被拒絕)
MySQL 進程無法存取數據目錄或無法建立臨時測試文件。
# 檢查數據目錄權限
ls -ld /var/lib/mysql
# 應為 mysql:mysql 且 750/755 權限
# 修正權限
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
# 檢查 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
# 檢查 my.cnf 配置
grep datadir /etc/my.cnf
# 確認路徑存在且正確
# 常見錯誤:datadir 指向不存在的目錄
datadir=/xxx # 此目錄不存在
df -h /var/lib/mysql
# 可用空間不足 10% 會導致啟動失敗
netstat -tlnp | grep 3306
# 若被佔用,kill 掉進程或修改 my.cnf port
# 檢查並清理
ls -la /var/lib/mysql/*.pid /var/lib/mysql/*.sock
rm -f /var/lib/mysql/*.pid /var/lib/mysql/*.sock
# 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();"
| Errcode | 含義 | 典型原因 |
|---|---|---|
| 13 | Permission denied | 目錄權限、SELinux、所有者錯誤 |
| 2 | No such file or directory | datadir 路徑錯誤、socket 文件缺失 |
| 28 | No space left on device | 磁盤滿、inode 耗盡 |
| 98 | Address already in use | 端口 3306 被佔用 |
| 111 | Connection refused | MySQL 未啟動、bind-address 配置錯誤 |