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

 更新时间:2026年02月14日 15:43:52   作者:FixPng  
MyDumper是一套高性能 MySQL 逻辑备份与恢复工具集,包含mydumper(备份工具)和 myloader(恢复工具),采用 C 语言开发,支持多线程并行处理,备份/恢复速度远超传统 mysqldump,本文介绍MySQL逻辑备份和恢复工具集( MyDumper & MyLoader)详解,感兴趣的朋友一起看看吧

一、工具介绍

核心定位

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逻辑备份恢复 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 游戏和服备忘问题简析

    游戏和服备忘问题简析

    这篇文章主要介绍了游戏和服备忘问题简析,小编觉得挺不错的,这里分享给大家,希望给大家一个参考。
    2017-10-10
  • mysql执行语句后只有错误代码,没有错误信息的问题

    mysql执行语句后只有错误代码,没有错误信息的问题

    这篇文章主要介绍了mysql执行语句后只有错误代码,没有错误信息的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 超全MySQL学习笔记

    超全MySQL学习笔记

    本文详细介绍了MySQL索引优化、锁和事物等学习记录,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 在OneProxy的基础上实行MySQL读写分离与负载均衡

    在OneProxy的基础上实行MySQL读写分离与负载均衡

    基于Libevent机制实现,单个实例可以实现25万的SQL转发能力,用一个OneProxy节点可以带动整个MySQL集群,为业务发展贡献一份力量,下面由小编来为大家简单说说
    2019-05-05
  • MySQL高效安全地清空多张表的数据的方法

    MySQL高效安全地清空多张表的数据的方法

    在日常的数据库开发与维护工作中,我们常常需要清空一张或多张表中的数据,无论是为了重置测试环境、执行数据迁移前的准备,还是应对某些特殊业务逻辑,如何高效、安全、规范地清空多张表的数据,是每个数据库使用者必须掌握的核心技能,下面跟着小编一起来看看吧
    2025-11-11
  • Win7下安装MySQL5.7.16过程记录

    Win7下安装MySQL5.7.16过程记录

    这篇文章主要为大家分享了Win7下安装MySQL5.7.16过程的笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 老生常谈MYSQL模式匹配 REGEXP和like的用法

    老生常谈MYSQL模式匹配 REGEXP和like的用法

    下面小编就为大家带来一篇老生常谈MYSQL模式匹配 REGEXP和like的用法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Mysql权限管理grant命令使笔记

    Mysql权限管理grant命令使笔记

    这篇文章主要介绍了Mysql权限管理grant命令使笔记,详细记录了常用权限管理命令,需要的朋友可以参考下
    2014-05-05
  • MySQL检查和清理不可见字符的实现步骤

    MySQL检查和清理不可见字符的实现步骤

    在导入Excel表格到MySQL时,由于未进行数据清理,导致字段a出现了大量不可见字符的问题,这些字符包括空格、制表符、换行符和BOM头,下面就来介绍一下如何清理这些字符,感兴趣的可以了解一下
    2026-02-02
  • MySQL使用命令备份和还原数据库

    MySQL使用命令备份和还原数据库

    这篇文章主要介绍了MySQL使用命令备份和还原数据库,本文使用Mysql内置命令实现备份和还原,比较简单,需要的朋友可以参考下
    2015-01-01

最新评论