業務增長驅動數據拆分(分庫/分表/遷移),工具選型直接影響停機窗口、數據一致性、運維成本。本文對比三大主流方案——邏輯導出、物理備份+恢復、表空間傳輸的原理、適用場景、操作步驟、優劣勢,助你按需選型。
| 維度 | mysqldump | xtrabackup + 恢復 | Transportable Tablespace (TTS) |
|---|---|---|---|
| 類型 | 邏輯導出 | 物理備份 | 物理文件拷貝 |
| MySQL 版本要求 | 全版本 | 5.1+ | 5.6.6+ |
| 停機時間 | 長(全量鎖表/單事務) | 短(備份無鎖,恢復需停機) | 極短(僅 DDL 鎖) |
| 數據量適用 | < 50GB | 50GB - 數 TB | 單表 > 10GB、大表遷移 |
| 跨版本遷移 | ✓ 兼容性最好 | ✗ 主版本需一致 | ✗ 主版本需一致 |
| 異構存儲引擎 | ✓ 可轉引擎 | ✗ 必須同引擎 | ✗ 僅 InnoDB |
| 操作複雜度 | 低 | 中 | 高(需精確控制步驟) |
| 並行度 | 單線程(可用 mydumper 並行) | 並行備份/恢復 | 單表串行 |
mysqldump -h$host -u$user -p$pass \
--single-transaction \ -- InnoDB 一致性視圖,無鎖
--master-data=2 \ -- 記錄 Binlog 位點(從庫同步用)
--routines --triggers \ -- 存儲過程/觸發器
--set-gtid-purged=OFF \ -- GTID 模式避免污染
--quick \ -- 流式讀取,不緩存全表
--compress \ -- 網絡壓縮
db_name tbl1 tbl2 > dump.sql
mysql -h$target -u$user -p$pass db_name < dump.sql
# 或並行導入工具:mydumper/myloader
ALTER TABLE t DISABLE KEYS(MyISAM)、分批 INSERT、調大 innodb_buffer_pool_size、innodb_log_file_size--default-character-set=utf8mb4# 1. 準備表清單文件
echo "db.tbl1" > /tmp/tables.txt
echo "db.tbl2" >> /tmp/tables.txt
# 2. 並行備份(需 xtrabackup 2.4+ / 8.0)
xtrabackup --backup \
--target-dir=/backup/partial \
--tables-file=/tmp/tables.txt \
--parallel=4 \
--compress \
--compress-threads=2
# 1. 恢復備份
xtrabackup --prepare --target-dir=/backup/partial --export
# 2. 啟動新實例(datadir 指向恢復目錄),修改 server_id、port
# 3. 配置複製過濾,僅同步目標表
# my.cnf
replicate-wild-do-table=db.tbl%
# 或
replicate-do-table=db.tbl1
replicate-do-table=db.tbl2
# 4. CHANGE MASTER TO ... 從原主庫同步增量
# Master
USE db;
SHOW CREATE TABLE tbl; -- 1. 獲取建表語句
FLUSH TABLES tbl FOR EXPORT; -- 2. 產生 .cfg、刷髒頁
# Slave
USE db;
CREATE TABLE tbl (...); -- 3. 建空表
ALTER TABLE tbl DISCARD TABLESPACE; -- 4. 刪 .ibd
# 文件傳輸
scp /data/mysql/db/tbl.{ibd,cfg} slave:/data/mysql/db/
# Slave 繼續
ALTER TABLE tbl IMPORT TABLESPACE; -- 5. 導入
UNLOCK TABLES; -- 6. Master 解鎖
foreign_key_checks=1 時有外鍵依賴(需先刪外鍵)FLUSH TABLES ... FOR EXPORT 期間表只讀,業務寫入阻塞IF 數據量 < 50GB AND 需跨版本/異構引擎:
USE mysqldump / mydumper
ELSE IF 數據量 50GB - 2TB AND 同版本 InnoDB:
USE xtrabackup + 複製過濾
ELSE IF 單表 > 10GB AND 需極短停機 AND 同版本:
USE TTS
ELSE:
考慮異構同步 + 雙寫遷移
pt-table-checksum 一致性校驗、業務驗證、壓測