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

Ubuntu 遷移 MySQL 數據目錄完整操作指南:AppArmor 配置、權限保持、零停機驗證

     編輯:MySQL 資料庫相關知識

將 MySQL 數據目錄從 /var/lib/mysql 遷移至掛載雲盤(如 /mnt/data/mysql)是擴容、災備的常規操作。Ubuntu 引入 AppArmor 強制存取控制,若未同步更新策略,MySQL 將啟動失敗。本文提供標準化遷移流程、AppArmor 規則修改、權限保持、驗證清單與回滾方案。

一、遷移前準備

# 1. 確認目標掛載點已掛載、檔案系統健康
df -h /mnt/data
lsblk -f

# 2. 停止 MySQL 服務
sudo systemctl stop mysql

# 3. 同步複製數據(保留屬性、時間戳、稀疏檔)
sudo rsync -avHAX /var/lib/mysql/ /mnt/data/mysql/

# 4. 修改目標目錄擁有者
sudo chown -R mysql:mysql /mnt/data/mysql
sudo chmod 750 /mnt/data/mysql

二、修改 AppArmor 策略(關鍵步驟)

# 編輯 AppArmor MySQL 策略
sudo vim /etc/apparmor.d/usr.sbin.mysqld

# 找到原有路徑規則,新增目標路徑(保留原路徑以防回滾)
# 原:/var/lib/mysql r,  → 新增:
/mnt/data/mysql r,
/mnt/data/mysql/** rwk,

# 保存後重新載入策略
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
# 或重啟 AppArmor 服務
sudo systemctl restart apparmor

三、修改 MySQL 配置

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 修改 datadir
datadir = /mnt/data/mysql
# 可選:調整 innodb_data_home_dir、innodb_log_group_home_dir 等相關路徑

四、啟動驗證

sudo systemctl start mysql
# 檢查狀態
sudo systemctl status mysql
# 登入驗證數據完整性
mysql -u root -p -e "SHOW DATABASES; SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='your_db';"

五、常見失敗與排查

現象原因解決
啟動失敗,日誌 Permission deniedAppArmor 策略未生效或路徑錯誤sudo aa-status | grep mysqld 確認策略載入;dmesg | grep apparmor 看拒絕詳情
啟動失敗,InnoDB: Operating system error number 13目錄擁有者非 mysql:mysql 或權限不足chown -R mysql:mysql /mnt/data/mysql; chmod 750 /mnt/data/mysql
從庫同步中斷主庫遷移導致 binlog 位置變化遷移前停寫、記錄 SHOW MASTER STATUS,遷移後從庫 CHANGE MASTER TO 重新定位
查詢報錯 Table doesn't existrsync 遺漏隱藏檔或符號鏈接使用 rsync -avHAX 保留硬鏈接、ACL、擴展屬性

六、零停機遷移方案(主從架構)

  1. 從庫先遷移(按上述流程),驗證正常。
  2. 將流量切換至從庫(升級為主)。
  3. 原主庫按流程遷移,驗證後作為新從庫加入。
  4. 全程業務無感知,僅需應用層支援讀寫分離或 VIP 浮動 IP。

七、回滾方案

# 1. 停止 MySQL
sudo systemctl stop mysql
# 2. 恢復配置
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf  # datadir = /var/lib/mysql
# 3. 恢復 AppArmor(移除新增路徑並重載)
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
# 4. 啟動
sudo systemctl start mysql

遷移數據目錄是「換心手術」,AppArmor 是 Ubuntu 特有的「免疫排斥反應」。按流程操作、雙邊驗證、預留回滾,方能萬無一失。

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