萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 數據目錄遷移指南:Linux、FreeBSD、Windows 三平台操作實戰

MySQL 數據目錄(datadir)預設位置往往在系統盤,隨資料增長易填滿根分區,或因磁碟規劃需遷移至專用數據盤。本文提供 Linux、FreeBSD、Windows 三大平台的標準遷移流程,含軟連結法、配置文件法、權限處理與驗證步驟。

核心原則

  • 停庫遷移最安全:避免遷移過程中寫入導致數據不一致
  • 保留原目錄結構:整體移動 datadir 整個目錄,而非單獨移動表文件
  • 權限保持一致:目標目錄擁有者/群組必須為 mysql:mysql
  • SELinux/AppArmor:遷移後需更新安全策略或打標簽

Linux 平台(systemd 管理)

方法一:修改配置文件(標準、推薦)

# 1. 停止服務
systemctl stop mysqld

# 2. 同步數據(保留屬性、權限、時間戳)
rsync -av /var/lib/mysql/ /data/mysql/

# 3. 備份原目錄(防回滾)
mv /var/lib/mysql /var/lib/mysql.bak

# 4. 修改配置
# /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /data/mysql/mysql.sock

# 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';"

方法二:軟連結法(不改配置、快速回滾)

systemctl stop mysqld
mv /var/lib/mysql /data/mysql
ln -s /data/mysql /var/lib/mysql
# SELinux 仍需打標簽
systemctl start mysqld

優點:配置文件無需改、回滾只需刪連結換回目錄。缺點:部分工具/腳本可能不識別符號鏈接。

權限修正(若以 root 操作)

chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql

FreeBSD 平台

/usr/local/etc/rc.d/mysql-server stop
mkdir -p /data/mysql
mv /var/db/mysql /data/mysql
ln -s /data/mysql /var/db/mysql
# 權限
chown -R mysql:mysql /data/mysql
/usr/local/etc/rc.d/mysql-server start

FreeBSD 無 SELinux,但需檢查 /etc/rc.conf 中 mysql_dbdir 設置是否衝突。

Windows 平台

1. 查詢當前 datadir

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-------------------+
| Variable_name | Value             |
+---------------+-------------------+
| datadir       | D:/MySql5.0/data/ |
+---------------+-------------------+

2. 停止服務

net stop mysql

3. 移動數據目錄

用資源管理器或 robocopy 將 D:/MySql5.0/data 移至目標位置(如 E:/mysql_data)。

4. 修改 my.ini

[mysqld]
datadir="E:/mysql_data"

5. 啟動驗證

net start mysql
mysql> SHOW VARIABLES LIKE 'datadir';

遷移後驗證清單

  • SHOW VARIABLES LIKE 'datadir'; 確認新路徑
  • SHOW TABLES; 確認表可見
  • SELECT COUNT(*) FROM key_table; 確認數據完整
  • SHOW SLAVE STATUS\G(若為從庫)確認複製正常
  • 錯誤日誌無異常報錯
  • 備份腳本路徑已更新
  • 監控採集器目標路徑已更新

常見問題排查

現象可能原因解決
啟動失敗 Can't create test file目錄權限錯誤 / SELinux/AppArmor 阻擋chown -R mysql:mysql、restorecon、調整 AppArmor 規則
啟動失敗 Unknown/unsupported storage engine: InnoDBibdata1/ib_logfile 損壞或遺漏檢查共享表空間文件是否完整遷移、innodb_force_recovery
從庫複製中斷relay_log 路徑變更 / datadir 變更導致 relay log 丟失重新 CHANGE MASTER TO 指定正確位置
InnoDB 錯誤 tablespace id mismatch攜帶 .ibd 文件遷移但未 DISCARD/IMPORT TABLESPACE整體遷移 datadir 而非單表文件

遵循「停庫、同步、改配、打標、驗證」標準流程,配合平台特性處理權限與安全策略,MySQL 數據目錄遷移可實現零數據丟失、最小停機時間的平滑遷移。

copyright © 萬盛學電腦網 all rights reserved