一、工具介绍

- 代码仓库:https://github.com/mydumper/mydumper
- 官方文档:https://mydumper.github.io/mydumper/docs/html/index.html
核心定位
mydumper 是一套高性能 mysql 逻辑备份与恢复工具集,包含 mydumper(备份工具)和 myloader(恢复工具),采用 c 语言开发,支持多线程并行处理,备份/恢复速度远超传统 mysqldump,适用于 mysql、percona、mariadb、tidb 等兼容数据库,由社区维护的开源工具(非 percona/mariadb/mysql 官方产品)。
核心特性
- mydumper:
- 多线程并行备份,支持文件压缩、binlog 导出、表数据分片备份;
- 保证事务性和非事务性表的一致性快照(遵循 mysql 最佳实践);
- 支持守护进程模式,可定时快照和连续备份二进制日志;
- 支持 pcre 正则表达式筛选数据库/表,输出文件结构清晰(分表存储)。
- myloader:
- 多线程并行恢复,支持压缩文件直接导入;
- 可指定恢复到不同数据库,支持索引优化策略(如延迟创建索引);
- 支持校验和验证,确保恢复数据一致性;
- 兼容 mydumper 生成的备份格式,支持自定义导入行为(如忽略表、替换表名)。
协议与兼容性
- 开源免费,遵循 gnu gplv3 协议;
- 支持 mysql 5.5+、mariadb 10.x+、tidb 等,兼容主流 linux 发行版。
优缺点
- 优点:
- 并行处理大幅提升速度,备份/恢复效率高;
- 数据一致性有保障,支持细粒度筛选;
- 输出/输入文件易管理,支持压缩和外部命令扩展;
- 恢复时可灵活调整策略(如索引优化)。
- 缺点:
- mydumper 多线程备份基于表维度,单张大表场景需通过
-r参数分片优化; - 对非事务性引擎(如 myisam)的一致性支持有限(需依赖 ftwrl)。
- mydumper 多线程备份基于表维度,单张大表场景需通过
相关工具对比
| 特点 | mysqldump | mysqlpump | mydumper | xtrabackup |
|---|---|---|---|---|
| 并发性 | 单线程 | 单线程 | 多线程 | 多线程 |
| 性能 | 较低 | 中等 | 较高 | 较高 |
| 备份速度 | 较慢 | 中等 | 较快 | 较快 |
| 恢复速度 | 较慢 | 中等 | 较快(使用myloader进行恢复) | 较快 |
| 兼容性 | mysql 和 mariadb | mysql 5.7.8 及更高版本 | mysql 和 mariadb | mysql 和部分 mariadb版本 |
| 灵活性 | 高 | 高 | 高 | 高 |
| 压缩备份 | 不支持 | 支持 | 支持 | 支持 |
| 官方支持 | 是(由oracle官方提供) | 是(由oracle官方提供) | 否(由社区维护) | 是(由percona官方提供) |
| 跨平台支持 | 是 | 是 | 是 | 是 |
| 备份类型 | 逻辑备份 | 逻辑备份 | 逻辑备份 | 物理备份 |
| 是否锁表 | 是(备份过程中锁表) | 是(部分情况下锁表) | 否 | 否(可在不锁表的情况下备份) |
| 增量备份 | 不支持 | 不支持 | 不支持 | 支持 |
二、核心原理
1. mydumper 备份原理
通过主线程+子线程协同实现一致性备份,流程如下:
- 主线程:
- 执行
flush tables with read lock获取全局读锁,防止备份期间数据写入; - 读取
show master/slave status记录 binlog 位置等元数据; - 创建子线程并分配备份任务(按表拆分),等待子线程建立快照;
- 子线程快照建立完成后释放全局锁,避免长时间阻塞业务。
- 执行
- 子线程:
- 连接数据库并设置
repeatable read隔离级别; - 执行
start transaction with consistent snapshot获取一致性快照; - 并行导出表结构和数据,生成独立文件;
- 所有子线程完成后,主线程汇总生成
metadata文件(记录备份时间、binlog 信息等)。
- 连接数据库并设置

2. myloader 恢复原理
- 解析 mydumper 备份目录中的
metadata和表文件; - 主线程分配恢复任务(表结构→表数据→触发器/存储过程),子线程并行执行;
- 支持延迟创建索引(
--optimize-keys),先导入数据再建索引提升效率; - 可选校验和验证,确保恢复数据与备份一致。

三、安装方式
1. rpm 包安装
# 下载地址:https://github.com/mydumper/mydumper/releases rpm -ivh mydumper-<version>-<dist>.x86_64.rpm # 验证安装 which mydumper which myloader
2. docker 构建
# 从源码构建(支持 zstd 压缩)
docker build --build-arg cmake_args='-dwith_zstd=on' -t mydumper \
https://github.com/mydumper/mydumper.git#master:docker四、用法命令
1. mydumper 常用参数与场景
核心参数
mydumper --help -b, --database 逗号分隔的备份数据库列表(非单库指定) -t, --tables-list 逗号分隔的备份表列表(需包含库名,如 test.t1,test.t2) -o, --outputdir 备份输出目录(必填) -e, --build-empty-files 表无数据时生成空文件 -x, --regex 正则匹配 db.table -t, --threads 线程数(0=cpu核心数,默认4,最小2) -r, --rows 按行数分片(格式 min:start_at:max,max=0无限制) -v, --verbose 日志级别(0=静默,1=错误,2=警告,3=信息,默认2) --less-locking 已废弃,默认行为由 --trx-tables 替代 --trx-tables 仅备份事务表(优化锁策略) --no-trx-tables 包含非事务表(锁释放更慢) -g, --triggers 导出触发器(默认不导出) -e, --events 导出事件(默认不导出) -r, --routines 导出存储过程/函数(默认不导出) --exec 外部命令处理文件(如 --exec "/usr/bin/zstd filename") --defaults-file 指定配置文件路径(默认 /etc/mydumper.cnf) --no-views 不导出视图 --no-data 仅导出表结构 --daemon 守护进程模式(定时备份) --snapshot-interval 守护进程快照间隔(分钟,默认60) --clear 备份前清空输出目录 --format 输出格式(insert/load_data/csv/clickhouse,默认insert)
实战场景
# (1)单库备份(详细日志) mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -o /data/backup/testdb --verbose=3 --logfile /data/backup/testdb.log # (2)多库备份(逗号分隔) mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb,my_test -o /data/backup/multi_db -t 8 # (3)单表分片备份(最小1万行,起始2万行,无上限) mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -t testdb.orders -r 10000:20000:0 -o /data/backup/orders # (4)仅备份事务表(优化锁策略) mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb --trx-tables -o /data/backup/testdb_trx # (5)守护进程模式定时备份(每30分钟快照,保留2份) mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -o /data/backup/daemon_backup --daemon --snapshot-interval 30 # (6)备份前清空目录 mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -o /data/backup/testdb --clear # (7)导出为csv格式 mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -t testdb.orders --format csv -o /data/backup/csv_data # (8)开数据压缩 -c mydumper -h 192.168.31.110 -p 3306 -u root -p aaa12345 -b testdb -c -o /data/backup/testdb_c
2. myloader 常用参数与场景
核心参数
myloader --help -d, --directory 备份文件目录(必填) -b, --database 恢复到的目标数据库 -t, --threads 恢复线程数(0=cpu核心数,默认4,最小2) --drop-table 处理已存在表(fail/none/drop/truncate/delete,默认fail) --optimize-keys 索引优化策略(after_import_per_table/after_import_all_tables/skip,默认前者) --enable-binlog 恢复过程记录binlog(建议用配置文件替代) -v, --verbose 日志级别(0=静默,1=错误,2=警告,3=信息,默认2) --defaults-file 指定配置文件路径 --skip-definer 跳过存储过程/函数的definer语句 --replace 用replace替代insert(避免主键冲突) --ignore-errors 忽略指定错误码(如 --ignore-errors 1050) --source-data 从metadata恢复复制配置 --checksum 校验和处理策略(skip/fail/warn,默认fail) --resume 断点续传恢复
实战场景
# (1)恢复单库到新库名(删除目标表) myloader -h 192.168.31.110 -p 3306 -u root -p aaa12345 -d /data/backup/testdb -b testdb_new1 --drop-table drop # (2)延迟创建索引(所有表导入后建索引) myloader -h 192.168.31.110 -p 3306 -u root -p aaa12345 -d /data/backup/testdb -b testdb_new2 --optimize-keys after_import_all_tables # (3)断点续传恢复 myloader -h 192.168.31.110 -p 3306 -u root -p aaa12345 -d /data/backup/testdb -b testdb_new3 --resume # (4)忽略表已存在错误 myloader -h 192.168.31.110 -p 3306 -u root -p aaa12345 -d /data/backup/testdb -b testdb_new4 --ignore-errors 1050
五、配置文件使用
1. 配置文件示例(/etc/mydumper.cnf)
[mydumper] host = 192.168.31.110 user = root password = aaa12345 port = 3306 # 默认备份的数据库名 database = testdb # 备份线程数(0=cpu核心数,默认4) threads = 8 # 仅备份事务表(优化锁策略,1=启用) trx-tables = 1 # 日志级别(0=静默,1=错误,2=警告,3=信息) verbose = 3 # 日志输出文件路径 logfile = /var/log/mydumper.log # 正则匹配表(备份testdb库下非tmp_开头的表) regex = ^(testdb\.)(?!tmp_) [myloader] host = 192.168.31.110 user = root password = aaa12345 port = 3306 # 默认恢复的目标数据库名 database = testdb_restore # 恢复线程数(0=cpu核心数,默认4) threads = 8 # 处理已存在表的策略(drop=删除原表后重建) drop-table = drop # 索引优化策略(所有表导入完成后统一建索引) optimize-keys = after_import_all_tables # 日志级别(0=静默,1=错误,2=警告,3=信息) verbose = 3
2. 指定配置文件的使用方式
# mydumper 使用配置文件备份 mydumper --defaults-file=/etc/mydumper.cnf -o /data/backup/testdb_from_config # myloader 使用配置文件恢复 myloader --defaults-file=/etc/mydumper.cnf -d /data/backup/testdb_from_config -b testdb_restore_from_config
注意:
- 配置文件中无需参数的选项(如
trx-tables)设置为1/true即启用;--overwrite-tables已废弃,需用--drop-table drop替代;--less-locking已废弃,事务表场景用--trx-tables,非事务表用--no-trx-tables;- mydumper 的
-b参数支持逗号分隔多库,非单库专属;- myloader 的
--optimize-keys默认值为after_import_per_table(每张表导入后建索引);
到此这篇关于mysql逻辑备份和恢复工具集( mydumper & myloader)详解的文章就介绍到这了,更多相关mysql逻辑备份恢复 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论