修改 MySQL 數據目錄後啟動失敗,錯誤日誌顯示:
131204 09:09:15 mysqld_safe Starting mysqld daemon with databases from /data/mysql
/usr/local/mysql/bin/mysqld: File './mysql-bin.index' not found (Errcode: 13)
131204 9:09:15 [ERROR] Aborting
Errcode: 13 = Permission denied(Linux errno 13)。mysql-bin.index 實際存在於數據目錄,但目錄權限為 700,擁有者為 root:root。mysql 用戶運行,無權讀寫該目錄下文件。cp -r 或 tar 解包,導致擁有者/權限異常。# 1. 停止服務
systemctl stop mysqld
# 或
service mysqld stop
# 2. 遞歸修正擁有者與權限
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql # 目錄需 x 權限才能進入
find /data/mysql -type f -exec chmod 640 {} \;
find /data/mysql -type d -exec chmod 750 {} \;
# 3. 若使用 SELinux(CentOS/RHEL),需恢復上下文
restorecon -Rv /data/mysql
# 4. 啟動驗證
systemctl start mysqld
tail -f /data/mysql/error.log # 觀察啟動日誌
ls -ld /data/mysql 顯示 drwxr-x--- mysql mysqlls -l /data/mysql/mysql-bin.index 顯示 -rw-r----- mysql mysqlErrcode: 13,顯示 mysqld: ready for connections為避免數據目錄權限變更影響 Binlog,建議將 Binlog 放在獨立掛載點:
[mysqld]
log-bin = /data/binlog/mysql-bin
log-bin-index = /data/binlog/mysql-bin.index
# 該目錄同樣需 chown -R mysql:mysql
| 錯誤代碼 | 含義 | 典型原因 |
|---|---|---|
| Errcode: 13 | Permission denied | 目錄/文件擁有者非 mysql 用戶,或權限不足 |
| Errcode: 2 | No such file or directory | 路徑配置錯誤、目錄未創建 |
| Errcode: 28 | No space left on device | 磁盤滿、inode 耗盡 |
| Errcode: 11 | Resource temporarily unavailable | 文件描述符耗盡,調大 ulimit -n |