Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql逻辑备份恢复

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

作者:FixPng

MyDumper是一套高性能 MySQL 逻辑备份与恢复工具集,包含mydumper(备份工具)和 myloader(恢复工具),采用 C 语言开发,支持多线程并行处理,备份/恢复速度远超传统 mysqldump,本文介绍MySQL逻辑备份和恢复工具集( MyDumper & MyLoader)详解,感兴趣的朋友一起看看吧

一、工具介绍

核心定位

MyDumper 是一套高性能 MySQL 逻辑备份与恢复工具集,包含 mydumper(备份工具)和 myloader(恢复工具),采用 C 语言开发,支持多线程并行处理,备份/恢复速度远超传统 mysqldump,适用于 MySQL、Percona、MariaDB、TiDB 等兼容数据库,由社区维护的开源工具(非 Percona/MariaDB/MySQL 官方产品)。

核心特性

协议与兼容性

优缺点

相关工具对比

特点mysqldumpmysqlpumpmydumperxtrabackup
并发性单线程单线程多线程多线程
性能较低中等较高较高
备份速度较慢中等较快较快
恢复速度较慢中等较快(使用myloader进行恢复)较快
兼容性MySQL 和 MariaDBMySQL 5.7.8 及更高版本MySQL 和 MariaDBMySQL 和部分 MariaDB版本
灵活性
压缩备份不支持支持支持支持
官方支持是(由Oracle官方提供)是(由Oracle官方提供)否(由社区维护)是(由Percona官方提供)
跨平台支持
备份类型逻辑备份逻辑备份逻辑备份物理备份
是否锁表是(备份过程中锁表)是(部分情况下锁表)否(可在不锁表的情况下备份)
增量备份不支持不支持不支持支持

二、核心原理

1. mydumper 备份原理

通过主线程+子线程协同实现一致性备份,流程如下:

2. myloader 恢复原理

三、安装方式

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

您可能感兴趣的文章:
阅读全文