萬盛學電腦網

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

MySQL 資料目錄遷移完整步驟:修改 datadir、複製檔案、權限修正與驗證

適用場景

  • 系統碟空間不足,需將資料移至資料盤。
  • 統一多實例資料目錄管理。
  • 遷移至 SSD/NVMe 提升 IOPS。

操作步驟

  1. 停止 MySQL 服務

    systemctl stop mysqld
    # 或
    service mysql stop
  2. 修改配置檔 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 路徑同步修改
  3. 複製資料目錄(保留權限、屬性、時間戳)

    # 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
  4. 修正擁有者與權限

    chown -R mysql:mysql /new/path/mysql/data
    chmod 750 /new/path/mysql/data
    # 確認 .err、.pid、.sock 可寫入
  5. 更新 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
  6. 啟動服務並驗證

    systemctl start mysqld
    mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
    # 應顯示新路徑

常見坑點

  • 忘記修改 socket 路徑 → 客戶端連線失敗。
  • 複製遺漏隱藏檔(.err、.pid、ib_logfile*、ibdata*)。
  • SELinux/AppArmor 阻擋寫入 → 系統日誌出現 Permission denied 但檔案權限正確。
  • 啟動腳本 mysqld_safe 內硬編碼舊路徑 → 檢查並修正。

驗證清單

  1. 服務正常運行。
  2. SHOW VARIABLES LIKE 'datadir'; 顯示新路徑。
  3. 建表、寫入、查詢、備份還原皆正常。
  4. 錯誤日誌無報錯。
  5. 舊目錄可刪除(建議保留 1 週後再刪)。
copyright © 萬盛學電腦網 all rights reserved