服務器遷移、環境克隆、災難恢復核心技能:MySQL 數據導出導入。本文記錄 Linux 服務器到 Mac 本地的完整遷移流程,涵蓋 mysqldump 參數優化、大文件傳輸、字符集兼容、版本差異處理、驗證清單。
一、遠程服務器導出
1. 基礎導出 (單庫)
mysqldump -u root -p \
--single-transaction \
--routines --triggers --events \
--master-data=2 \
--hex-blob \
--default-character-set=utf8mb4 \
mywordpress > /var/backup/mywordpress_$(date +%F).sql
2. 參數解析
| 參數 | 作用 |
--single-transaction | InnoDB 熱備份,不鎖表,保證一致性視圖 |
--routines --triggers --events | 導出存儲過程、觸發器、定時事件 |
--master-data=2 | 輸出 CHANGE MASTER TO 註釋,記錄 Binlog 位點 |
--hex-blob | 二進制字段十六進制導出,避免字符集問題 |
--default-character-set=utf8mb4 | 強制連接字符集,防止亂碼 |
--compress | 網絡傳輸壓縮 (慢速網絡建議) |
--quick | 大表流式讀取,不緩存全表到內存 |
3. 大庫分表導出 (並行加速)
# 獲取大表列表
mysql -uroot -p -e "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='bigdb' AND TABLE_ROWS > 1000000;"
# 並行導出 (需 GNU parallel)
parallel -j 4 "mysqldump -uroot -p bigdb {} > /backup/bigdb_{}.sql" ::: table1 table2 table3
二、文件傳輸
# 壓縮傳輸 (推薦)
gzip -c /var/backup/mywordpress_2024-01-15.sql | ssh user@mac "cat > ~/mywordpress.sql.gz"
# 或使用 rsync 斷點續傳
rsync -avzP /var/backup/ user@mac:~/mysql_backup/
三、本地導入
1. 創建目標庫
CREATE DATABASE mywordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2. 導入數據
# 解壓並導入
gunzip -c ~/mywordpress.sql.gz | mysql -u root -p mywordpress
# 或分步
gunzip ~/mywordpress.sql.gz
mysql -u root -p mywordpress < ~/mywordpress.sql
3. 導入優化參數
# 臨時調大參數加速導入
mysql -uroot -p -e "
SET GLOBAL innodb_flush_log_at_trx_commit=2;
SET GLOBAL sync_binlog=0;
SET GLOBAL foreign_key_checks=0;
SET GLOBAL unique_checks=0;
SET GLOBAL sql_log_bin=0;
"
# 導入完成後恢復
mysql -uroot -p -e "
SET GLOBAL innodb_flush_log_at_trx_commit=1;
SET GLOBAL sync_binlog=1;
SET GLOBAL foreign_key_checks=1;
SET GLOBAL unique_checks=1;
SET GLOBAL sql_log_bin=1;
"
四、跨版本/跨平台兼容性處理
| 場景 | 問題 | 解決 |
| 5.7 → 8.0 | 保留字變更、認證插件、系統表結構 | 導出前 mysqlcheck --fix-db-names --fix-table-names;導入後 mysql_upgrade |
| Linux → Mac | 大小寫敏感度 (lower_case_table_names) | 統一設置 lower_case_table_names=1 (Mac/Win) 或 0 (Linux) |
| 字符集遷移 | latin1 → utf8mb4 亂碼 | 導出指定 --default-character-set=latin1,導入庫表指定 utf8mb4 |
| GTID 啟用差異 | GTID 集合衝突 | 導出加 --set-gtid-purged=OFF 或導入前 RESET MASTER |
五、驗證清單
- 對象計數:
SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='db' 源目標一致
- 行數抽樣:核心大表
SELECT COUNT(*) 對比
- Checksum 對比:
CHECKSUM TABLE core_table 值一致
- 應用煙測:關鍵業務流程端到端驗證
- 權限同步:
pt-show-grants 導出授權並在目標執行
六、進階工具推薦
- mydumper/myloader:多線程並行導出導入,速度提升 5-10x
- xtrabackup:物理熱備份,大庫 (TB 級) 秒級備份、分鐘級恢復
- DTS/云廠商遷移服務:全增量同步、校驗、切換一站式