停止 MySQL 服務
systemctl stop mysqld
# 或
service mysql stop
修改配置檔 my.cnf / my.ini
[mysqld]
datadir = /new/path/mysql/data # Linux
# datadir = "D:/mysql/data" # Windows
socket = /new/path/mysql/data/mysql.sock # Linux socket 路徑同步修改
複製資料目錄(保留權限、屬性、時間戳)
# Linux
rsync -av /var/lib/mysql/ /new/path/mysql/data/
# 或
cp -rp /var/lib/mysql/* /new/path/mysql/data/
# Windows (管理員 PowerShell)
Robocopy "C:\ProgramData\MySQL\MySQL Server 8.0\Data" "D:\mysql\data" /E /COPY:DATSOU
修正擁有者與權限
chown -R mysql:mysql /new/path/mysql/data
chmod 750 /new/path/mysql/data
# 確認 .err、.pid、.sock 可寫入
更新 AppArmor/SELinux 策略
# Ubuntu/AppArmor
vim /etc/apparmor.d/usr.sbin.mysqld
# 新增 /new/path/mysql/data/ r, /new/path/mysql/data/** rwk,
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
# CentOS/SELinux
semanage fcontext -a -t mysqld_db_t "/new/path/mysql/data(/.*)?"
restorecon -Rv /new/path/mysql/data
啟動服務並驗證
systemctl start mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
# 應顯示新路徑
socket 路徑 → 客戶端連線失敗。.err、.pid、ib_logfile*、ibdata*)。Permission denied 但檔案權限正確。mysqld_safe 內硬編碼舊路徑 → 檢查並修正。SHOW VARIABLES LIKE 'datadir'; 顯示新路徑。