適用場景
- 系統盤空間不足,遷移至資料盤
- 統一多實例資料目錄結構
- 更換儲存設備 (HDD→SSD、本地→網路存儲)
Windows 圖文步驟 (文字版)
- 停止服務:
net stop mysql 或服務管理器
- 編輯 my.ini:
路徑通常在 C:\Program Files\MySQL\MySQL Server 5.x\my.ini
搜尋 datadir,修改為新路徑,例:
datadir="D:/MySQL/Data/" (正斜線、結尾斜線、雙引號)
- 複製資料:
將舊目錄 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.x\Data\ 內**所有檔案/資料夾**複製至新目錄 D:\MySQL\Data\
- 啟動服務:
net start mysql
- 驗證:
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
建表測試:CREATE DATABASE test_mv; USE test_mv; CREATE TABLE t (id INT); INSERT INTO t VALUES (1); SELECT * FROM t;
Linux 通用步驟
systemctl stop mysqld
# 1. 備份舊目錄 (保險)
rsync -av /var/lib/mysql/ /var/lib/mysql.bak/
# 2. 複製到新位置
mkdir -p /data/mysql
rsync -av /var/lib/mysql/ /data/mysql/
# 3. 修改 my.cnf
# [mysqld]
# datadir = /data/mysql
# socket = /data/mysql/mysql.sock
sed -i 's|^datadir=.*|datadir=/data/mysql|' /etc/my.cnf
sed -i 's|^socket=.*|socket=/data/mysql/mysql.sock|' /etc/my.cnf
# 4. 修正權限 (關鍵)
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
find /data/mysql -type f -exec chmod 640 {} \;
# 5. SELinux (如啟用)
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql
# 6. 啟動驗證
systemctl start mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
常見失敗原因
- 權限錯誤:
chown 漏跑、SELinux 阻擋
datadir 路徑寫法:Windows 用正斜線、結尾斜線、雙引號;Linux 不加引號
- 舊目錄殘留
mysql.sock、pid 檔干擾 → 複製前清理或啟動前刪除
- 未同步修改
socket 參數導致客戶端連線失敗