ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)
Errcode 13 = Permission denied。原因:mysqld 啟動時環境變數 UMASK/UMASK_DIR 導致新建檔案/目錄權限過嚴,其他進程(備份、監控、複寫)無法讀取。
| 變數 | 預設值 | 影響對象 | 八進制含義 |
|---|---|---|---|
| UMASK | 0660 | 資料檔 (.MYD, .MYI, .ibd, .frm) | 擁有者/群組可讀寫,其他無權限 |
| UMASK_DIR | 0700 | 資料庫目錄、分區目錄 | 僅擁有者可讀寫執行 |
| 場景 | UMASK | UMASK_DIR | 說明 |
|---|---|---|---|
| 單一 mysql 使用者 | 0660 | 0700 | 預設最安全 |
| 備份使用者同群組 | 0640 | 0750 | 備份腳本需讀取資料檔/進入目錄 |
| 多實例共享備份帳號 | 0640 | 0770 | 目錄需執行權限進入 |
# 建立測試資料庫/表
mysql -e "CREATE DATABASE test_umask; USE test_umask; CREATE TABLE t (id INT);"
# 檢查實際權限
ls -l /var/lib/mysql/test_umask/
# -rw-r----- 1 mysql mysql ... t.frm (UMASK=0640)
# drwxr-x--- 2 mysql mysql ... ./ (UMASK_DIR=0750)
檔案權限問題多源於 UMASK 預設值過嚴。標準化部署:在 systemd Environment 設定 UMASK/UMASK_DIR、驗證備份/監控帳號群組權限、納入基線檢查腳本,確保權限一致性跨環境復現。