官方网址:https://github.com/maxbube/mydumper
介绍与安装
mydumper 是一款社区工具,支持多线程导入和导出,相对 mysqldump,速度很快,默认是产生一致性备份。
mydumper 是可靠的,facebook、Twitter、网易就在用,但是因为是社区的,需要踩坑。
其 README 文件会说明如何安装,目前提供了 .rpm 和 .deb 两个发行版本以及源码。 --- 2019.12.02
编译安装完成后,会产生两个文件 mydumper(用于备份) 和 myloader(用于恢复)。
一致性备份原理(How does consistent snapshot work?)
This is all done following best MySQL practices and traditions:
- As a precaution, slow running queries on the server either abort the dump, or get killed
- Global write lock is acquired ("FLUSH TABLES WITH READ LOCK")
- Various metadata is read ("SHOW SLAVE STATUS","SHOW MASTER STATUS")
- Other threads connect and establish snapshots ("START TRANSACTION WITH CONSISTENT SNAPSHOT")
- Once all worker threads announce the snapshot establishment, master executes "UNLOCK TABLES" and starts queueing jobs
This for now does not provide consistent snapshots for non-transactional engines - support for that is expected in 0.2
常用备份选项
mydumper 连接 MySQL 的方法跟 mysql 一样。
-B, --database 对指定的库进行备份
-T, --tables-list 对指定的表进行备份
-r, --rows 对表按指定行数进行拆分,并行备份
-o, --outputdir 指定输出目录
-c, --compress 对输出文件进行压缩
-t, --threads 指定线程数(默认4)
-G, --triggers 备份触发器
-R, --routines 备份存储过程和函数
备份示例
# mydumper -B demodb -T employees -r 1000 -t 4 -o ./backup_mysql/
在该示例中,会生成1个建库文件,1个建表文件,和多个数据 insert 文件,还有一个 metadata 文件,会记录备份开始和结束时间,以及 binlog 日志文件位置(如果开了 binlog 的话)。
注意:mydumper 单表并行备份的前提是主键必须是整形,且不能是复合索引。
恢复示例
myloader -B demodb -t 4 -d ./backup_mysql/
正则支持(库名和表名过滤)
可以使用正则 --regex 选项对数据库名或者表名做过滤。这儿是几个示例,可供参考:
# mydumper --regex="^(demodb|mysql)\..*$" -o ./backup_mysql/ <-- 将正则表达式换成 "^.*$",就是对所有数据库进行备份
上面的语句会对 demodb 和 mysql 数据库进行备份,每个表会生成一个定义文件和数据文件,方便对某个表作单独恢复。
下面是 README 文件中的几个示例:
只备份 mysql 和 test 数据库:
# mydumper --regex '^(mysql\.|test\.)'
不要备份 mysql 和 test 数据库:
# mydumper --regex '^(?!(mysql\.|test\.))'
不要备份所有以 test 开始的数据库:
# mydumper --regex '^(?!(test))'