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

Ubuntu 遷移 MySQL 數據目錄完整教程:修改 datadir、AppArmor 配置、權限調整與驗證

     編輯:MySQL 綜合教學

Ubuntu MySQL 數據目錄遷移全流程(含 AppArmor 權限陷阱)

場景

預設 /var/lib/mysql 空間不足,掛載新磁碟 /mnt/data 遷移數據目錄。

1. 確認當前數據目錄

mysql> SHOW VARIABLES LIKE '%dir%';
-- datadir = /var/lib/mysql

2. 停止服務並遷移文件

sudo systemctl stop mysql
# 方案 A:移動(保留權限)
sudo mv /var/lib/mysql /mnt/data/
# 方案 B:複製(保留原始備份)
sudo cp -a /var/lib/mysql /mnt/data/

3. 修改三大配置文件

3.1 my.cnf

sudo vim /etc/mysql/my.cnf
[mysqld]
datadir = /mnt/data/mysql

3.2 AppArmor:/etc/apparmor.d/usr.sbin.mysqld

# 註釋舊路徑
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
# 新增新路徑
/mnt/data/mysql/ r,
/mnt/data/mysql/** rwk,

3.3 AppArmor 抽象:/etc/apparmor.d/abstractions/mysql

# 新增 socket 訪問
/mnt/data/mysql/mysql.sock rw,
# 可註釋舊路徑

4. 重載 AppArmor 並啟動 MySQL

sudo systemctl restart apparmor
sudo systemctl start mysql

5. 權限陷阱:父目錄需可讀執行

若啟動失敗,錯誤 Table 'plugin' is read only 或 Can't connect to ... mysqld.sock,原因是 mysql 用戶無法遍歷父目錄。

原 /var/lib 權限 755(root:root),mysql 用戶屬 other,可讀執行。新目錄 /mnt/data 若為 700 會導致無法訪問。

修復:

sudo chmod 755 /mnt/data
# /mnt 通常已是 755,無需改

6. 驗證遷移成功

mysql> SHOW VARIABLES LIKE 'datadir';
-- 應顯示 /mnt/data/mysql

總結關鍵點

  1. 遷移文件保留擁有者(mysql:mysql)與權限(cp -a 或 mv)。
  2. 修改 my.cnf + 兩處 AppArmor 配置。
  3. 父目錄必須對 mysql 用戶可讀執行 (o+rx),否則啟動失敗無明顯提示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved