首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 跨平台遷移實戰:Windows 到 Linux 數據零停機遷移指南

     編輯:MySQL 綜合教學

MySQL 跨平台遷移實戰:Windows → Linux

異構作業系統間遷移 MySQL 數據,核心挑戰在於文件路徑大小寫、字符集一致性、大數據量傳輸效率。本文提供標準化遷移流程與優化技巧。

一、遷移前準備

  1. 版本對齊:目標 Linux MySQL 主版本 ≥ 源 Windows 版本(如 5.7 → 5.7/8.0),避免降級不兼容。
  2. 字符集統一:源庫 SHOW VARIABLES LIKE 'character_set%',目標庫建庫時顯式指定 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci。
  3. 網絡互通:防火牆放行 3306,或使用 SSH 隧道/專線。
  4. 磁盤空間:目標端預留 ≥ 1.5× 源數據大小(含二進制日志、臨時文件)。

二、標準遷移流程(邏輯備份法,通用性最強)

1. 源端導出

# 單庫導出(含建庫語句、事件、觸發器、主從位置)
mysqldump -h 127.0.0.1 -u root -p --databases mydb \
  --events --routines --triggers --master-data=2 \
  --single-transaction --quick --hex-blob \
  --default-character-set=utf8mb4 > mydb_$(date +%F).sql

# 壓縮傳輸(大文件建議)
gzip mydb_2024-01-15.sql

2. 文件傳輸

# 方式一:scp(內網)
scp mydb_2024-01-15.sql.gz user@linux-host:/data/backup/

# 方式二:rsync(斷點續傳、增量同步)
rsync -avzP mydb_2024-01-15.sql.gz user@linux-host:/data/backup/

3. 目標端準備

# 登錄 Linux MySQL
mysql -u root -p

-- 創建同名數據庫(字符集顯式指定)
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 檢查字符集
SHOW CREATE DATABASE mydb;

4. 導入數據

# 解壓並導入(建議開啟事務批量提交加速)
gunzip -c mydb_2024-01-15.sql.gz | mysql -u root -p mydb

# 或分步
gunzip mydb_2024-01-15.sql.gz
mysql -u root -p mydb < mydb_2024-01-15.sql

5. 驗證一致性

# 表數量
SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydb';

# 行數抽樣
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydb';

# 關鍵表 checksum 對比
CHECKSUM TABLE mydb.core_table;

三、大數據量優化方案(TB 級)

痛點優化手段
單線程導入慢使用 mydumper/myloader 多線程並行導出導入(表級並發)
網絡帶寬瓶頸源端壓縮 gzip -1,或使用 xtrabackup 物理備份 + rsync 增量同步
導入過程中斷需斷點續傳myloader 支援斷點續傳;或分表導出分批導入
主從同步延遲遷移期間源庫停寫,或使用雙寫工具(如 Canal+Kafka)同步增量

四、物理備份遷移(僅限同版本、同架構、InnoDB 通用表空間)

# 1. 源庫加鎖刷盤
FLUSH TABLES WITH READ LOCK;
# 2. 複製 datadir(含 ibdata1、ib_logfile、.ibd 文件)
# 3. 解鎖
UNLOCK TABLES;
# 4. 目標端停服務,覆蓋 datadir,修正擁有者
chown -R mysql:mysql /var/lib/mysql
# 5. 啟動,執行 mysql_upgrade(跨小版本)

風險:文件級複製極易因頁損壞、版本不匹配導致不可用,非專家團隊不建議。

五、遷移後收尾

  1. 更新應用配置指向新實例(VIP/域名切換)。
  2. 啟用目標端備份策略、監控告警。
  3. 保留源實例 48h 觀察,確認無數據差異後下線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved