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,看看对你的生产环境是否会有极大的速度提升。

mysqlpump 原理的更多相关文章

  1. mysqlpump原理及实战

    MySQL5.7之后多了一个备份工具:mysqlpump.它是mysqldump的一个衍生,mysqldump就不多说明了,现在看看mysqlpump到底有了哪些提升,可以查看官方文档,这里针对如何使 ...

  2. (4.14)mysql备份还原——mysql物理热备工具之ibbackup

    关键词:mysql热备工具,ibbackup,mysql物理备份工具 1. 准备 ibbackup 是 InnoDB 提供的收费工具,它支持在线热备 InnoDB 数据,主要有以下特性: * Onli ...

  3. MySQL 逻辑备份mysqldump&mysqlpump&mydumper原理解析

    目录 准备 mysqldump备份 mysqlpump备份 mydumper备份 想弄清除逻辑备份的原理,最好的办法是开启general_log,一探究竟 准备 创建用户 CREATE USER IF ...

  4. MySQL备份原理详解

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  5. mysqldump和xtrabackup备份原理实现说明

    背景: MySQL数据库备份分为逻辑备份和物理备份两大类,犹豫到底用那种备份方式的时候先了解下它们的差异: 逻辑备份的特点是:直接生成SQL语句,在恢复的时候执行备份的SQL语句实现数据库数据的重现. ...

  6. mydumper原理5

    前言 之前介绍了Oracle官方的多线程逻辑导入导出工具mysqlpump,但已经操作过的同学会发现其多线程的单位还是表,换句话说, 单表依然是 单线程导出 .网易早已使用mydumper/myloa ...

  7. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  8. (转)MySQL备份原理详解

    MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之 ...

  9. mydumper,myloader原理及实战

    mydumper 特性 (1)多线程备份(和mysqlpump的多线程不同,mysqlpump多线程备份的粒度是表,mydumper多线程备份的粒度是行,这对于备份大表特别有用)(2)因为是多线程逻辑 ...

随机推荐

  1. 微信多媒体上传图片,创建卡券上传 LOGO

    //*****************************************多媒体上传图片 begin******************************************** ...

  2. CMDB反思1

    由于,基本已经完成一期的功能开发,所以要继续CMDB的开发工作了. 最近看了不少CMDB相关的文章,也思考了不少,后面将所思所想(比较浅)记录一下. 发现很多内容都记录在Wiz上,抽空整理到博客中. ...

  3. 感知器Perceptron

    Perceptron: 1.一种基于监督的线性分类器,其特点是:1)模型简单,具有很少的学习参数:2)具有可视性,一条直线即可划分:3)基于人工神经网络的原理. 其结构图为:  2.学习的关键技术: ...

  4. [LeetCode] Container With Most Water 简要分析

    前言 这题非要说贪心的话也算是吧,不过最主要的特征还是双指针.LC的题好像不少都是扔倆头尾指针然后遍历一遍完事儿的.这道题倒是“短板效应”的不错体现了. 题目 题目链接 Given n non-neg ...

  5. 利用Javascript获取当前日期的农历日期

    来源:http://www.ido321.com/926.html JavaScript代码 1: /*设置农历日期*/ 2: var CalendarData=new Array(100); 3: ...

  6. Windows Azure 不能ping通的解决方案

    Windows Azure 不能ping通如何解决? 为了避免Ping Flood攻击,Windows Azure不开放对外ICMP通讯协定,所以使用ping命令我们是无法ping通的.在微软资料中心 ...

  7. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》

    7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...

  8. 发现UC/OS-III源码有一处不明白!会不会是BUG.高手过来看看!

    http://www.amobbs.com/archiver/tid-4939669.html ———————————————————————————————————————————————————— ...

  9. CodeForces 176B Word Cut (计数DP)

    Word Cut Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit St ...

  10. JSF 2 graphicImage example

    In JSF, you can use <h:graphicImage /> tag to render a HTML "img" element. For examp ...