mydumper 多線程備份 MySQL 實戰:核心特性、工作流程、參數詳解與常用場景
1. 核心特性
- 多線程邏輯備份,生成多文件,速度遠超
mysqldump
- MyISAM 加
FLUSH TABLES WITH READ LOCK (FTWRL),阻塞 DML;InnoDB 開啟事務保證一致性
- 支持壓縮、導出 Binlog、多線程恢復、文件切塊
- 支持守護進程模式:定時快照 + 連續 Binlog
2. 核心參數速查表
| 參數 | 說明 |
| -B, --database | 指定備份庫 |
| -T, --tables-list | 指定備份表,逗號分隔 |
| -o, --outputdir | 輸出目錄(默認當前目錄下 export-時間戳) |
| -s, --statement-size | 單 INSERT 字節數 |
| -r, --rows | 按行數切塊大表 |
| -c, --compress | 壓縮輸出文件 |
| -e, --build-empty-files | 空表也生成文件 |
| -x, --regex | 正則匹配 'db.table' |
| -i, --ignore-engines | 忽略引擎 |
| -m, --no-schemas | 不導出表結構 |
| -k, --no-locks | 不加鎖(⚠️ 導致不一致) |
| -l, --long-query-guard | 長查詢閾值(秒) |
| --kill-long-queries | 殺掉長查詢 |
| -b, --binlogs | 導出 Binlog |
| -D, --daemon | 守護進程模式 |
| -I, --snapshot-interval | 快照間隔(秒),需配合 -D |
| -t, --threads | 線程數 |
3. 工作流程
- 連接目標庫
SHOW PROCESSLIST 檢測長查詢,按參數決定退出/殺掉
- MyISAM 加 FTWRL 鎖;InnoDB 開啟事務
START TRANSACTION
- 創建 Worker 子線程(默認 4)
- 分類候選表:InnoDB 表、非 InnoDB 表、表結構
- 任務隊列分發,Worker 並行導出
- MyISAM 完成立即
UNLOCK TABLES 減少鎖時間
- 等待所有 Worker 退出
4. 備份文件結構
- 目錄:
export-YYYYMMDD-HHMMSS/
metadata:記錄備份位點 (Binlog 文件名、Position)、從庫則含主庫位點
- 每表兩文件:
db.tbl-schema.sql (結構)、db.tbl.sql (數據)
- 切塊時生成多個數據文件
5. 常用備份示例
# 單庫
mydumper -u user -p pwd -B sakila -o /tmp/bak
# 全庫(自動排除 information_schema/performance_schema)
mydumper -u user -p pwd -o /tmp/bak
# 單表/多表
mydumper -u user -p pwd -B sakila -T actor -o /tmp/bak
mydumper -u user -p pwd -B sakila -T actor,city -o /tmp/bak
# 當前目錄自動生成時間戳目錄
mydumper -u user -p pwd -B sakila -T actor
# 不帶表結構
mydumper -u user -p pwd -B sakila -T actor -m
# 壓縮 + 連接壓縮協議
mydumper -u user -p pwd -B sakila -o /tmp/bak -c -C
# 正則匹配表
mydumper -u user -p pwd -B sakila --regex=actor* -o /tmp/bak
# 排除系統庫
mydumper -u user -p pwd --regex '^(?!(mysql|test))' -o /tmp/bak
# 空表也生成結構文件
mydumper -u user -p pwd -B sakila -T actor -e -o /tmp/bak
# 長查詢保護
mydumper -u user -p pwd -B sakila --long-query-guard 200 --kill-long-queries
# 詳細日志
mydumper -u user -p pwd -B sakila -T actor -v 3 -o /tmp/bak
# 導出 Binlog
mydumper -u user -p pwd -P 3306 -b -o /tmp/bak