默認數據目錄(Linux: /var/lib/mysql,FreeBSD: /var/db/mysql,Windows: C:\ProgramData\MySQL\Data)常位於系統盤,面臨磁碟空間不足、I/O 爭用、備份管理不便等問題。遷移核心原則:
# 1. 停止服務
systemctl stop mysqld
# 2. 創建新目標目錄 (建議獨立分區/磁碟)
mkdir -p /data/mysql
chown mysql:mysql /data/mysql
chmod 750 /data/mysql
# 3. 同步數據 (保留屬性、權限、軟連結)
rsync -av /var/lib/mysql/ /data/mysql/
# 4. 備份舊目錄並創建軟連接 (原子切換)
mv /var/lib/mysql /var/lib/mysql.bak
ln -s /data/mysql /var/lib/mysql
# 5. 若啟用 SELinux,需設置上下文
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql
# 6. 啟動驗證
systemctl start mysqld
mysql -e "SHOW VARIABLES LIKE 'datadir';"
優勢:無需修改 my.cnf,避免配置漂移;回滾只需刪除軟連接、重命名舊目錄。
# 1. 停止服務
/usr/local/etc/rc.d/mysql-server stop
# 2. 遷移數據
mkdir -p /storage/mysql
mv /var/db/mysql /storage/mysql/
# 3. 創建軟連接
ln -s /storage/mysql /var/db/mysql
# 4. 權限修正 (FreeBSD 默認用戶 _mysql)
chown -R _mysql:_mysql /storage/mysql
chmod 750 /storage/mysql
# 5. 啟動
/usr/local/etc/rc.d/mysql-server start
mysql> SHOW VARIABLES LIKE 'datadir';net stop mysqlD:\MySQL\Data),保留所有文件結構my.ini (通常在 MySQL 安裝目錄或 C:\ProgramData\MySQL\MySQL Server X.Y\my.ini):[mysqld]
datadir="D:/MySQL/Data"net start mysqlmysql> SHOW VARIABLES LIKE 'datadir';SHOW VARIABLES LIKE 'datadir'; 確認新路徑生效*.err 無異常報錯對於極高 I/O 需求場景,建議:
noatime,nodiratimeinnodb_flush_method=O_DIRECT 避免雙重緩存數據目錄遷移看似簡單,實則關係數據安全與服務連續性。堅持「停服遷移、軟連接切換、全鏈路驗證」三步走,配合自動化腳本與回滾預案,才能在生產環境萬無一失。