預設 /var/lib/mysql 空間不足,掛載新磁碟 /mnt/data 遷移數據目錄。
mysql> SHOW VARIABLES LIKE '%dir%';
-- datadir = /var/lib/mysql
sudo systemctl stop mysql
# 方案 A:移動(保留權限)
sudo mv /var/lib/mysql /mnt/data/
# 方案 B:複製(保留原始備份)
sudo cp -a /var/lib/mysql /mnt/data/
sudo vim /etc/mysql/my.cnf
[mysqld]
datadir = /mnt/data/mysql
# 註釋舊路徑
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
# 新增新路徑
/mnt/data/mysql/ r,
/mnt/data/mysql/** rwk,
# 新增 socket 訪問
/mnt/data/mysql/mysql.sock rw,
# 可註釋舊路徑
sudo systemctl restart apparmor
sudo systemctl start mysql
若啟動失敗,錯誤 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,無需改
mysql> SHOW VARIABLES LIKE 'datadir';
-- 應顯示 /mnt/data/mysql
cp -a 或 mv)。my.cnf + 兩處 AppArmor 配置。