萬盛學電腦網

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

MySQL 數據遷移大招:直接複製 data 目錄的 3 大避坑指南(datadir、innodb_log_file_size、字符集)

場景

大量資料(百 GB+)遷移,mysqldump 太慢。採用「停庫 → 複製 Data 目錄 → 啟動」物理遷移法。

操作流程

  1. 目標機安裝**相同版本** MySQL
  2. 源庫:FLUSH TABLES WITH READ LOCK;(全域鎖定)
  3. 複製整個 data 目錄到目標機
  4. 源庫:UNLOCK TABLES;
  5. 目標機修改 my.cnf 指向新 datadir
  6. 啟動目標機 MySQL

踩坑實錄:啟動失敗

InnoDB: Error: log file ./ib_logfile0 is of different size 0 63963136 bytes
InnoDB: than specified in the .cnf file 0 6291456 bytes!

原因:源庫 innodb_log_file_size=61M,目標機預設 6M,複製來的 ib_logfile* 尺寸不匹配,InnoDB 拒絕啟動。

3 大必改配置項

配置項必須與源庫一致說明
datadir✅指向新複製的 data 目錄絕對路徑
innodb_log_file_size✅**精確等於源庫 ib_logfile 大小**(單位 bytes),否則啟動失敗
character-set-server / collation-server✅字符集/校對規則不一致會導致資料亂碼、排序錯誤
innodb_page_size✅若源庫非預設 16K,目標機必須一致(罕見)
default_storage_engine✅確保預設引擎一致

修正步驟

# 1. 計算源庫 ib_logfile 大小(bytes)
ls -l /source/data/ib_logfile0
# 63963136 bytes = 61 MB

# 2. 目標機 my.cnf 修正
[mysqld]
datadir = /new/data/path
innodb_log_file_size = 61M
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 3. 啟動驗證
systemctl start mysqld

遷移後驗證清單

  1. CHECK TABLE ... EXTENDED 核心表檢查
  2. SELECT COUNT(*) 抽樣對比行數
  3. SHOW SLAVE STATUS 若為從庫,確認同步正常
  4. 應用端煙霧測試:讀寫、事務、存儲程序

總結

物理複製 Data 目錄遷移**極快**,但**三大鐵律**不可破:datadir 指向正確、innodb_log_file_size 與 ib_logfile 精確匹配、字符集校對規則完全一致。漏改任一項即啟動失敗或資料損壞。建議寫成 Ansible Playbook 固化流程,消除人為疏漏。

copyright © 萬盛學電腦網 all rights reserved