首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 修改 datadir 導致啟動失敗:SELinux 權限問題完整解決

     編輯:MySQL 綜合教學

MySQL 修改 datadir 導致啟動失敗:SELinux 權限問題完整解決

在 CentOS 6.2 環境下,將 MySQL datadir 遷移至掛載的 Windows 共享目錄 /mnt/hgfs/mysql_data 後,服務啟動失敗,錯誤日誌顯示:

[Warning] Can't create test file /mnt/hgfs/mysql_data/data.lower-test
[ERROR] Aborting
/usr/libexec/mysqld: Can't change dir to '/mnt/hgfs/mysql_data/' (Errcode: 13)

目錄權限已設為 777,上層目錄亦有 rx 權限,擁有者為 root(因掛載特性),卻仍無法啟動。

根因分析:SELinux 強制模式阻擋

CentOS 預設啟用 SELinux Enforcing 模式,針對 mysqld_t 進程僅允許存取標準標籤目錄(如 /var/lib/mysql、/tmp 等)。掛載的非常規目錄缺乏正確的 SELinux 安全上下文,導致存取被拒(Errcode 13 = EACCES)。

解決方案

方案一:暫時設為 Permissive 模式(驗證用)

getenforce          # 顯示 Enforcing
setenforce 0        # 切換為 Permissive
getenforce          # 顯示 Permissive

此時 MySQL 可正常啟動。注意:重啟後失效,不建議生產環境長期使用。

方案二:永久關閉 SELinux(生產常用,需評估風險)

vi /etc/selinux/config
# 修改
SELINUX=disabled
# 重啟作業系統生效

修改後需 重開機 才生效。

方案三:正規做法——調整 SELinux 檔案標籤(推薦)

保持 SELinux Enforcing,為新 datadir 賦予正確上下文:

# 1. 安裝工具
yum install -y policycoreutils-python

# 2. 參考標準目錄標籤
ls -Z /var/lib/mysql
# 輸出範例:system_u:object_r:mysqld_db_t:s0

# 3. 為新目錄設定相同標籤
semanage fcontext -a -t mysqld_db_t "/mnt/hgfs/mysql_data(/.*)?"
restorecon -Rv /mnt/hgfs/mysql_data

驗證:

ls -Z /mnt/hgfs/mysql_data
# 應顯示 mysqld_db_t 標籤

此後 MySQL 可在 Enforcing 模式下正常存取新目錄,兼顧安全與功能。

補充說明

  • 若使用 NFS、CIFS 等網路掛載,還需設定布林值:setsebool -P mysql_connect_any 1。
  • 遷移 datadir 後,記得同步修改 /etc/my.cnf 中的 datadir 與 socket 路徑。
  • 錯誤日誌路徑通常在 /var/log/mysqld.log 或 datadir 下的 hostname.err。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved