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

Ubuntu下MySQL數據目錄遷移實戰(一):停服、同步、修改配置與AppArmor準入

     編輯:MySQL 資料庫相關知識

遷移前準備與環境確認

  • 系統:Ubuntu 7.10+ (引入 AppArmor 強制訪問控制)
  • 默認數據目錄:/var/lib/mysql
  • 目標目錄:/home/mysql (示例,建議掛載獨立磁盤分區)

標準遷移操作流程

1. 停止 MySQL 服務

sudo /etc/init.d/mysql stop
# 或 systemctl stop mysql

2. 同步數據文件(保留權限、屬主、時間戳)

sudo rsync -av /var/lib/mysql/ /home/mysql/
# 或 cp -Rp /var/lib/mysql /home/mysql  (較慢,不顯示進度)

關鍵:-a 保留所有屬性,-v 可視化進度。目標目錄父級需存在且屬主為 mysql:mysql。

3. 修改 MySQL 配置文件

sudo nano /etc/mysql/my.cnf
# 找到 [mysqld] 段下的 datadir 行
datadir = /home/mysql

4. 配置 AppArmor 訪問準入(核心難點)

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?

AppArmor 實現路徑級強制訪問控制 (MAC)。即使文件系統權限 (DAC) 正確,若路徑不在策略白名單,內核直接阻攔 MySQL 進程訪問,服務啟動失敗並記錄 apparmor="DENIED" 審計日志。

下一步預告

配置完成後,需執行 sudo /etc/init.d/apparmor reload 使策略生效,隨後啟動 MySQL 驗證。常見坑點:圖形編輯器生成 ~ 備份文件干擾策略加載,詳見後篇《Ubuntu下MySQL數據目錄遷移實戰(二)》。

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