当前位置: 代码网 > it编程>数据库>Mysql > MySQL逻辑备份和恢复工具集( MyDumper & MyLoader)详解

MySQL逻辑备份和恢复工具集( MyDumper & MyLoader)详解

2026年02月15日 Mysql 我要评论
一、工具介绍代码仓库:https://github.com/mydumper/mydumper官方文档:https://mydumper.github.io/mydumper/docs/html/in

一、工具介绍

核心定位

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)。

相关工具对比

特点mysqldumpmysqlpumpmydumperxtrabackup
并发性单线程单线程多线程多线程
性能较低中等较高较高
备份速度较慢中等较快较快
恢复速度较慢中等较快(使用myloader进行恢复)较快
兼容性mysql 和 mariadbmysql 5.7.8 及更高版本mysql 和 mariadbmysql 和部分 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

注意

  1. 配置文件中无需参数的选项(如 trx-tables)设置为 1/true 即启用;
  2. --overwrite-tables 已废弃,需用 --drop-table drop 替代;
  3. --less-locking 已废弃,事务表场景用 --trx-tables,非事务表用 --no-trx-tables
  4. mydumper 的 -b 参数支持逗号分隔多库,非单库专属;
  5. myloader 的 --optimize-keys 默认值为 after_import_per_table(每张表导入后建索引);

到此这篇关于mysql逻辑备份和恢复工具集( mydumper &amp; myloader)详解的文章就介绍到这了,更多相关mysql逻辑备份恢复 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com