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

MySQL 檔案權限問題徹底解決:UMASK 環境變數控制資料庫/表/目錄預設權限

     編輯:MySQL 資料庫相關知識

現象與根因

ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)

Errcode 13 = Permission denied。原因:mysqld 啟動時環境變數 UMASK/UMASK_DIR 導致新建檔案/目錄權限過嚴,其他進程(備份、監控、複寫)無法讀取。

UMASK 與 UMASK_DIR 機制

實際權限 = 基礎權限 & ~UMASK (檔案) / 基礎權限 & ~UMASK_DIR (目錄)。

調整方法

1. 啟動腳本前設定環境變數

# 檔案權限 660 → 640 (群組可讀)
UMASK=384  # 八進制 0600
export UMASK

# 目錄權限 700 → 770 (群組可進入)
UMASK_DIR=504  # 八進制 0770
export UMASK_DIR

mysqld_safe &

2. systemd 服務永久生效

# systemctl edit mysqld
[Service]
Environment=UMASK=384
Environment=UMASK_DIR=504

3. MySQL 3.23.25+ 八進制直接寫法

UMASK=0600
UMASK_DIR=0770

場景化建議

變數預設值影響對象八進制含義
UMASK0660資料檔 (.MYD, .MYI, .ibd, .frm)擁有者/群組可讀寫,其他無權限
UMASK_DIR0700資料庫目錄、分區目錄僅擁有者可讀寫執行
場景UMASKUMASK_DIR說明
單一 mysql 使用者06600700預設最安全
備份使用者同群組06400750備份腳本需讀取資料檔/進入目錄
多實例共享備份帳號06400770目錄需執行權限進入

驗證生效

# 建立測試資料庫/表
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、驗證備份/監控帳號群組權限、納入基線檢查腳本,確保權限一致性跨環境復現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved