修改 MySQL 配置檔 my.cnf 中的 datadir 指向新目錄 (如 /data/mysql) 後,重啟服務失敗。錯誤日誌提示 plugin 表無法讀取,建議執行 mysql_upgrade,但實際上並非資料表損壞。
Ubuntu/Debian 等系統預設啟用 AppArmor,MySQL 設定檔 /etc/apparmor.d/usr.sbin.mysqld 僅允許訪問預設資料目錄 (/var/lib/mysql)。新目錄未在白名單中,導致讀寫被攔截。
vim /etc/apparmor.d/usr.sbin.mysqld /data/mysql r,
/data/mysql/** rwk,
service apparmor reload
# 或
systemctl reload apparmor
service mysql restartsemanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" + restorecon -Rv /data/mysql + setsebool -P mysql_connect_any 1。datadir 後,務必將舊目錄資料完整複製至新目錄,並確保擁有者為 mysql:mysql (chown -R mysql:mysql /data/mysql)。