mysqlpump 原理

Oracle官方多线程逻辑备份工具

 

 

 

昨天Inside君写到MySQL 5.7.11版本发布,其中最有意义的部分在于官方修复了之前mysqlpump工具一致性备份的问题,使得mysqlpump工具在生产环境中有了用武之地。而在之前MySQL 5.7的文档中明确写着,mysqlpump是不支持一致性的备份:

 

Before MySQL 5.7.11, use of the --single-transaction option is mutually exclusive with parallelism. To use --single-transaction, disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas

 

在5.7.11版本的change history中,对于这个问题已经有了修复:

 

mysqlpump tries to do as much work in parallel as possible, but the dump threads lacked a synchronization point before backing up the data, resulting in inconsistent backup.

 

mysqlpump相对于之前的逻辑备份工具mysqldump来说,Inside君总结的优势如下:

 

  1. 支持基于表的多线程导出功能(参数--default-parallelism,默认为2,参数--parallel-schemas,控制并行导出的库)

  2. 导出的时候带有进度条(参数--watch-progress,默认开启)

  3. 支持直接压缩导出导入(参数--compress-output,支持ZLIB和LZ4)

 

mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库。但是,对于每张表的导出只能是单个线程的,这和mydumper工具是不一样的,因为mydumper支持一张表多个线程以chunk的方式批量导出,这在主键是随机的情况下,导出速度还能有提升。mysqlpump的架构如下图所示:

 

 

 

接着Inside君对比了mysqldump与mysqlpump的导出速度,选择的数据库大小为7.8G,每次备份测试时都重启数据库,清空缓冲池中的内容。其中各表的大小如下所示:

 

root@test-1:/mdata/mysql_data# ls -lh tpcc/*.ibd

-rw-r----- 1 mysql mysql 1.9G Feb 21 22:58 tpcc/customer.ibd

-rw-r----- 1 mysql mysql 160K Feb 21 23:12 tpcc/district.ibd

-rw-r----- 1 mysql mysql 208M Feb 21 22:58 tpcc/history.ibd

-rw-r----- 1 mysql mysql  17M Feb 21 22:23 tpcc/item.ibd

-rw-r----- 1 mysql mysql  32M Feb 22 00:05 tpcc/new_orders.ibd

-rw-r----- 1 mysql mysql 2.1G Feb 22 10:00 tpcc/order_line.ibd

-rw-r----- 1 mysql mysql 132M Feb 22 00:05 tpcc/orders.ibd

-rw-r----- 1 mysql mysql 3.5G Feb 21 23:12 tpcc/stock.ibd

-rw-r----- 1 mysql mysql  48K Feb 21 23:11 tpcc/warehouse.ibd

 

由于只有tpcc单个数据库,这里mysqlpump测试采用默认单队列2个线程和单队列4个线程测试,mysqlpump测试语句如下:

 

root@test-1:/mdata/mysql_data# time mysqlpump --single-transaction  -B tpcc > tpcc.sql

root@test-1:/mdata/mysql_data# time mysqlpump --single-transaction --default-parallelism=4 -B tpcc > tpcc.sql

 

最后的测试结果如下所示:

 

 

 

测试在网易云环境下(顺序写入性能有限),这时可以发现默认配置下mysqlpump的速度比起mysqldump快了39.04%,4个线程下快了有48.89%。接着测试多个数据库备份的场景,这里选择7.8G大小的tpcc库和2.4G大小的dbt3数据库,最后得到的结果mysqlpump比起mysqldump最高快了70%多的时间:

 

 

 

总结

 

mysqlpump的语法与mysqldump高度兼容,支持基于库和表的并行导出,对比mysqldump速度提升非常明显。MySQL 5.7.11版本解决了一致性备份问题,推荐线上环境使用。由于每个数据库大小,架构不同,测试给出的速度提升只是参考,或许在你的环境会没有任何差别,也可能速度提升更大。anyway,是时候好好测试mysqlpump,看看对你的生产环境是否会有极大的速度提升。

转载于:https://www.cnblogs.com/zengkefu/p/5669634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值