MySQL备份工具之mydumper

1 工具介绍
mydumper 是一款社区开源的逻辑备份工具。该工具主要由 C 语言编写,目前由 MySQL 、Facebook 等公司人员开发维护。
官网地址:https://launchpad.net/mydumper
GitHub 地址:https://github.com/maxbube/mydumper
参考官方介绍,mydumper 主要有以下几点特性:
支持多线程导出数据,速度更快;
支持一致性备份;
支持将导出文件压缩,节约空间;
支持多线程恢复;
支持以守护进程模式工作,定时快照和连续二进制日志;
支持按照指定大小将备份文件切割;
数据与建表语句分离。
备份原理图:

备份过程主要步骤概括:
(1) 主线程 FLUSH TABLES WITH READ LOCK , 施加全局只读锁,以阻止 DML 语句写入,保证数据的一致性;
(2) 读取当前时间点的二进制日志文件名和日志写入的位置并记录在 metadata 文件中,以供即时点恢复使用;
(3) N 个(线程数可以指定,默认是 4个)dump 线程 START TRANSACTION WITH CONSISTENT SNAPSHOT ; 开启读一致的事物;
(4) dump non-InnoDB tables , 首先导出非事物引擎的表;
(5) 主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁;
(6) dump InnoDB tables , 基于事物导出 InnoDB 表;
(7) 事物结束。
2 常用备份工具对比
备份工具 | 安装难度 | 备份类型 | 备份速度 | 备份即时点 | 压缩备份 | 远程备份 |
mysqldump | 自带 | 逻辑 | 慢 | 不支持 | 不支持 | 支持 |
xtrabackup | 比较难 | 物理 | 较快 | 支持 | 不支持 | 不支持 |
mydumper | 简单 | 逻辑 | 快 | 支持 | 支持 | 支持 |
3 安装方法
下载对应的mydumper安装包,此处以centos或redhat的x86_64的安装包为例:
# wget https://github.com/maxbube/mydumper/releases/download/v0.10.7-2/mydumper-0.10.7-2.el7.x86_64.rpm
# rpm -ivh mydumper-0.10.7-2.el7.x86_64.rpm
4 参数说明
4.1 mydumper备份参数
参数名 | 缩写 | 含义 |
--user | -u | 备份所使用的用户 |
--pasword | -p | 连接所用的用户密码 |
--host | -h | MySQL 服务端地址 |
--port | -P | MySQL 端口号 |
--threads | -t | 开启的备份线程数,默认是4 |
--database | -B | 要备份的数据库,不指定则备份所有库 |
--tables-list | -T | 需要备份的表,名字用逗号隔开 |
--outputdir | -o | 备份文件输出的目录 |
--statement-size | -s | 生成的insert语句的字节数,默认1000000,与--rows冲突 |
--rows | -r | 将表按行分割,指定这个选项会关闭 --chunk-filesize |
--chunk-filesize | -F | 将表按大小分割时,指定分割大小,单位是 MB |
--regex | -x | 使用正则表达式匹配'db.table' |
--compress | -c | 压缩输出文件 |
--ignore-engines | -i | 忽略的存储引擎 |
--no-schemas | -m | 不备份表结构 |
--no-data | -d | 不备份表数据 |
--triggers | -G | 备份触发器 |
--events | -E | 备份事件 |
--routines | -R | 备份存储过程和函数 |
--no-views | -W | 不备份视图 |
--no-locks | -k | 不使用临时共享只读锁,使用这个选项会造成数据不一致 |
--daemon | -D | 启用守护进程模式,守护进程模式以某个间隔不间断对数据库进行备份 |
--where | 只导出选择的数据 |
使用示例:
# 备份全部数据库
mydumper -u root -p 123456 -r 100000 -o /mysql_backup/all/
注:全量备份会备份 mysql、sys 系统库及其他自建库
# 备份全部数据库 包含触发器、事件、存储过程及函数
mydumper -u root -p 123456 -G -R -E -o -r 100000 /mysql_backup/all2/
# 备份指定库
mydumper -u root -p 123456 -G -R -E -r 100000 -B db1 -o /mysql_backup/db1/
# 使用正则 排除系统库
mydumper -u root -p 123456 -G -R -E -r 100000 --regex '^(?!(mysql|sys))' -o /mysql_backup/all3
# 备份指定表
mydumper -u root -p 123456 -B db1 -T tb1,tb2 -r 100000 -o /mysql_backup/tb/
# 只备份表结构
mydumper -u root -p 123456 -d -r 100000 -B db1 -o /mysql_backup/nodata/
# 只备份表数据
mydumper -u root -p 123456 -m -r 100000 -B db1 -o /mysql_backup/noschema/
# 压缩备份某个表
mydumper -u root -p 123456 -r 100000 -B db1 -T tb1 -c -o /mysql_backup/compress/
Tips:备份时建议配置-r 参数,按行分割,避免恢复时一次insert数据太多导致触发系统OOMKill。
4.2 myloader还原参数
参数名 | 缩写 | 含义 |
--user | -u | 使用的用户名 |
--pasword | -p | 连接所用的用户密码 |
--host | -h | MySQL 服务端地址 |
--port | -P | MySQL 端口号 |
--threads | -t | 开启的线程数,默认是4 |
--directory | -d | 指定待恢复的备份目录 |
--queries-per-transaction | -q | 每次事务执行的查询数量,默认是1000 |
--overwrite-tables | -o | 如果要恢复的表存在,则先drop掉该表 |
--database | -B | 需要还原到哪个数据库(目标数据库) |
--source-db | -s | 选择被还原的数据库(源数据库) |
--enable-binlog | -e | 在恢复时开启binlog |
使用示例:
# 恢复备份文件中的全部 若表已存在则先删除
myloader -u root -p 123456 -o -d /backups/all3
# 从全备中恢复指定库
myloader -u root -p 123456 -s db1 -o -d /backups/all3
# 将某个数据库备份还原到另一个数据库中(目标库不存在则会新建)
myloader -u root -p 123456 -B recover_db1 -s db1 -o -d /backups/all
MySQL备份工具之mydumper
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



