共计 2213 个字符,预计需要花费 6 分钟才能阅读完成。
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 君总结的优势如下:
- 支持基于表的并行导出功能(参数–default-parallelism,默认为 2,参数–parallel-schemas,控制并行导出的库)
- 导出的时候带有进度条(参数–watch-progress,默认开启)
- 支持直接压缩导出导入(参数–compress-output,支持 ZLIB 和 LZ4)
mysqlpump 的并行导出功能的架构为:队列 + 线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定 1 个或者多个数据库。但是,对于每张表的导出只能是单个线程的,这和 mydumper 工具是不一样的,因为 mydumper 支持一张表多个线程以 chunk 的方式批量导出,这在主键是随机的情况下,导出速度还能有提升。mysqlpump 的架构如下图所示:
接着 Inside 君对比了 mysqldump 与 mysqlpump 的导出速度,选择的数据库大小为 7.8G,每次备份测试时都重启数据库,清空缓冲池中的内容。其中各表的大小如下所示:
1 2 3 4 5 6 7 8 9 10 | 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 测试语句如下:
1 2 | 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,看看对你的生产环境是否会有极大的速度提升。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134469.htm