萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 啟動報錯「File './mysql-bin.index' not found (Errcode: 13)」權限修復實戰

故障現象

修改 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

根因分析

  1. Errcode: 13 = Permission denied(Linux errno 13)。
  2. 文件 mysql-bin.index 實際存在於數據目錄,但目錄權限為 700,擁有者為 root:root。
  3. MySQL 進程以 mysql 用戶運行,無權讀寫該目錄下文件。
  4. 常見原因:遷移數據時以 root 身份 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 mysql
  • ✅ ls -l /data/mysql/mysql-bin.index 顯示 -rw-r----- mysql mysql
  • ✅ 錯誤日誌無 Errcode: 13,顯示 mysqld: ready for connections

延伸:Binlog 目錄分離最佳實踐

為避免數據目錄權限變更影響 Binlog,建議將 Binlog 放在獨立掛載點:

[mysqld]
log-bin = /data/binlog/mysql-bin
log-bin-index = /data/binlog/mysql-bin.index
# 該目錄同樣需 chown -R mysql:mysql

常見同類錯誤對照表

錯誤代碼含義典型原因
Errcode: 13Permission denied目錄/文件擁有者非 mysql 用戶,或權限不足
Errcode: 2No such file or directory路徑配置錯誤、目錄未創建
Errcode: 28No space left on device磁盤滿、inode 耗盡
Errcode: 11Resource temporarily unavailable文件描述符耗盡,調大 ulimit -n
copyright © 萬盛學電腦網 all rights reserved