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

Ubuntu 遷移 MySQL 數據目錄至新分區完整操作手冊

     編輯:MySQL 資料庫相關知識

磁盤空間不足時,將 MySQL 數據目錄從默認 /var/lib/mysql 遷移至大容量分區(如 /home/data/mysql)是常規運維操作。本文提供 Ubuntu 12.04+ 通用的標準遷移流程,含權限處理、配置修改、AppArmor 適配、驗證清理全步驟。

遷移前準備

  • 目標分區掛載點已就緒(如 /home/data),文件系統建議 ext4/xfs。
  • 確保目標分區剩餘空間 ≥ 當前數據目錄 1.5 倍。
  • 備份關鍵配置:cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak。

標準遷移 6 步走

1. 停止 MySQL 服務

sudo service mysql stop
# 或 systemctl stop mysql (Ubuntu 16.04+)

2. 複製數據目錄(保留屬性、權限、符號鏈接)

sudo rsync -av /var/lib/mysql/ /home/data/mysql/
# -a 歸檔模式保留所有屬性,-v 顯示進度
# 結尾斜桿 / 表示複製目錄內容而非目錄本身

3. 設置目標目錄權限

sudo chown -R mysql:mysql /home/data/mysql
sudo chmod -R 750 /home/data/mysql  # 目錄 750,文件 640 更安全

4. 修改 MySQL 配置文件

sudo vim /etc/mysql/my.cnf
# 找到 [mysqld] 區塊,修改 datadir
datadir = /home/data/mysql

5. 適配 AppArmor(Ubuntu 必須,否則啟動失敗)

sudo vim /etc/apparmor.d/usr.sbin.mysqld
# 在文件中添加兩行(路徑按實際調整)
/home/data/mysql/ r,
/home/data/mysql/** rwk,

# 重載 AppArmor
sudo service apparmor reload

6. 啟動驗證

sudo service mysql start
# 檢查錯誤日誌
sudo tail -f /var/log/mysql/error.log

# 登錄驗證數據完整性
mysql -u root -p -e "SHOW DATABASES; SELECT COUNT(*) FROM your_table;"

遷移後清理

確認新目錄運行穩定 24+ 小時後,可刪除舊數據目錄釋放空間:

sudo rm -rf /var/lib/mysql  # 謹慎執行,確保無其他實例依賴

常見坑點與排查

現象原因解決
啟動失敗,錯誤日誌顯示 Can't create/write to fileAppArmor 未放行新路徑檢查 /etc/apparmor.d/usr.sbin.mysqld 配置並 reload
權限正確但啟動報 Permission denied目標分區掛載選項含 noexec/nosuidmount -o remount,exec,suid /home/data 或修改 /etc/fstab
從庫複製中斷主庫數據目錄路徑變更導致 relay log 路徑異常重新配置從庫 CHANGE MASTER TO 或重做從庫

總結

核心口訣:停服務、rsync 複製、改權限、改 my.cnf、配 AppArmor、啟驗證、清舊目錄。AppArmor 是 Ubuntu 遷移特有的「隱形攔截器」,漏配必失敗,務必列入標準操作清單。

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