首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Ubuntu 遷移 MySQL 資料目錄 (datadir) 至新分區完整操作指南

     編輯:MySQL 綜合教學

場景

預設 datadir = /var/lib/mysql 位於根分區,磁碟空間不足需遷移至大容量分區(如 /home/data/mysql)。

操作步驟

1. 停止 MySQL 服務

sudo systemctl stop mysql
# 或 sudo service mysql stop

2. 建立新目標目錄並複製資料(保留屬性與權限)

sudo mkdir -p /home/data/mysql
sudo cp -rp /var/lib/mysql/* /home/data/mysql/
# -p 保留權限、時間戳、擁有者;-r 遞歸

3. 設定新目錄權限(mysql 用戶/群組)

sudo chown -R mysql:mysql /home/data/mysql
sudo chmod -R 750 /home/data/mysql

4. 修改 MySQL 配置檔指向新 datadir

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到 datadir 行,修改為:
datadir = /home/data/mysql
# 註解舊行:# datadir = /var/lib/mysql

5. 處理 AppArmor 限制(Ubuntu 必須步驟)

Ubuntu 預設啟用 AppArmor 限制 MySQL 只能存取 /var/lib/mysql。需調整策略:

sudo vim /etc/apparmor.d/usr.sbin.mysqld
# 找到 /var/lib/mysql/ 相關行,複製並修改為新路徑:
/home/data/mysql/ r,
/home/data/mysql/** rwk,

# 重新載入 AppArmor
sudo systemctl reload apparmor
# 或 sudo /etc/init.d/apparmor reload

6. 啟動 MySQL 並驗證

sudo systemctl start mysql
sudo systemctl status mysql

# 驗證資料完整性
mysql -u root -p -e "SHOW DATABASES; SELECT COUNT(*) FROM mysql.user;"

7. 清理舊資料目錄(驗證無誤後)

# 確認新目錄運作正常後
sudo rm -rf /var/lib/mysql
# 或備份留存:sudo mv /var/lib/mysql /var/lib/mysql.bak

替代方案:符號連結法(不修改配置檔)

sudo systemctl stop mysql
sudo mv /var/lib/mysql /home/data/mysql
sudo ln -s /home/data/mysql /var/lib/mysql
sudo systemctl start mysql

優點:無需改配置、AppArmor 通常允許符號連結目標。缺點:部署工具/備份腳本可能誤判路徑,不如修改 datadir 明確。

常見問題排查

現象原因解決
啟動失敗,日誌 Permission denied新目錄擁有者非 mysql:mysql 或權限不足chown -R mysql:mysql /home/data/mysql; chmod 750
啟動失敗,AppArmor DENIED未更新 AppArmor 策略修改 /etc/apparmor.d/usr.sbin.mysqld 並 reload
InnoDB 錯誤:無法開啟 .ibd 檔案複製遺漏檔案 / 檔案系統不支援用 cp -rp 或 rsync -a 完整複製;確認目標分區支援延伸屬性
複本/叢集環境同步中斷datadir 變更影響複本協調按複本拓撲依序遷移,更新 CHANGE MASTER TO 等

生產環境最佳實踐

  1. 維護窗口操作:預告停機,掛維護頁面
  2. 完整備份後再遷移:mysqldump --single-transaction --routines --triggers --all-databases > full_backup.sql
  3. 使用 rsync 替代 cp:rsync -avH /var/lib/mysql/ /home/data/mysql/(可斷點續傳、驗證檢核和)
  4. 遷移後執行 ANALYZE TABLE:更新統計資訊,確保查詢計劃最佳
  5. 監控磁碟空間:設定新分區使用率告警

總結

Ubuntu 遷移 MySQL datadir 核心步驟:停服務 → cp -rp 複製 → chown 權限 → 改 my.cnf datadir → 更新 AppArmor → 重啟驗證 → 清理舊目錄。AppArmor 是 Ubuntu 特有的關鍵阻礙,務必同步調整。生產環境務必備份、維護窗口、rsync 複製、事後 ANALYZE。

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