/var/lib/mysql/home/mysql (示例,建議掛載獨立磁盤分區)sudo /etc/init.d/mysql stop
# 或 systemctl stop mysql
sudo rsync -av /var/lib/mysql/ /home/mysql/
# 或 cp -Rp /var/lib/mysql /home/mysql (較慢,不顯示進度)
關鍵:-a 保留所有屬性,-v 可視化進度。目標目錄父級需存在且屬主為 mysql:mysql。
sudo nano /etc/mysql/my.cnf
# 找到 [mysqld] 段下的 datadir 行
datadir = /home/mysql
Ubuntu 7.10+ 強制啟用 AppArmor,MySQL 僅能訪問策略白名單內的路徑。
sudo nano /etc/apparmor.d/usr.sbin.mysqld
# 找到並註釋舊路徑 (行首加 #)
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
# 在附近添加新路徑
/home/mysql/ r,
/home/mysql/** rwk,
r:目錄讀取/遍歷rwk:文件讀/寫/加鎖** 遞歸匹配子文件AppArmor 實現路徑級強制訪問控制 (MAC)。即使文件系統權限 (DAC) 正確,若路徑不在策略白名單,內核直接阻攔 MySQL 進程訪問,服務啟動失敗並記錄 apparmor="DENIED" 審計日志。
配置完成後,需執行 sudo /etc/init.d/apparmor reload 使策略生效,隨後啟動 MySQL 驗證。常見坑點:圖形編輯器生成 ~ 備份文件干擾策略加載,詳見後篇《Ubuntu下MySQL數據目錄遷移實戰(二)》。