mydumper是一个针对MySQL和Drizzle的高性能多线程的备份和恢复工具。此工具的开发人员分别来自MySQL、Fackbook、SkySQL公司,目前已经有一些大型产品业务测试并使用了该工具。我们在恢复数据库时也可以使用myloader工具。

Mydumper的主要特性包括:

一、采用了轻量级C语言写的代码。

二、相比于mysqldump,其速度快了近10倍(有待测试)

三、具有事务性和非事务性表一致的快照(应用于0.2.2+)

四、可以快速进行文件压缩(File compression on-the-fly)

五、支持导出binlog

六、可以多线程恢复(适用于0.2.1+)

七、可以用守护进程的工作方式,定时扫描和输出连续的二进制日志

测试环境:6核、6G内存,备份数据里为1.5G左右。

安装mydumper,到官网下载mydumper包:https://launchpad.net/mydumper/

[root@localhost ~]# yum install glib2-devel mysql-devel zlib-devel pcre-devel cmake -y
[root@localhost ~]# tar zxvf mydumper-0.6..tar.gz
[root@localhost ~]# cd mydumper-0.6.
[root@localhost mydumper-0.6.]# cmake .
[root@localhost mydumper-0.6.]# make && make install

mydumper中主要参数说明:(mydumper --help)

--host, -h:                 连接的MySQL服务器。
--user, -u: 用户备份的链接用户。
--password, -p: 用户的密码。
--port, -P: 连接端口。
--socket, -S: 连接socket文件。
--database, -B: 需要备份的数据库。
--table-list, -T: 需要备份的表,用逗号(,)分隔。
--outputdir, -o:       输入的目录。
--built-empty-files, -e: 默认无数据则有表结构文件。
--regex, -x: 支持正则表达式,如mydumper -regex '^(?!(mysql|test))'。
--ignore-engines, -i: 忽略的存储引擎。
--no-schemas, -m: 不导出表结构。
--long-query-guard: 长查询,默认60s。
--kill-long-queries, -k: 可以设置kill长查询。
--verbose, -v:=silent, =errors, =warnings, =info 默认是2。
--binlogs, -b: 导出binlog。
--daemon, -D: 启用守护进程模式。
--snapshot-interval, -I: dump快照间隔时间,默认60s。
--logfile, -L: mysqldumper的日志输出,一般在Daemon模式下使用。

myloader的大多数参数和mydumper一样,如下:

-d, --directory                   备份文件的文件夹
-q, --queries-per-transaction 每次事物执行的查询数量,默认是1000
-o, --overwrite-tables 如果要恢复的表存在,则先drop掉该表,使用该参数,需要备份时候要备份表结构
-B, --database 需要还原的数据库
-e, --enable-binlog 启用还原数据的二进制日志
-h, --host 主机
-u, --user 还原的用户
-p, --pass<a href="http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a> 密码
-P, --port 端口
-S, --socket socket文件
-t, --threads 还原所使用的线程数,默认是4
-C, --compress-protocol 压缩协议
-V, --version 显示版本
-v, --verbose 输出模式, = silent, = errors, = warnings, = info, 默认为2

下面分别使用mydumper和mysqldump备份,看备份时间,如下:

[root@localhost tpcc-mysql]# time mydumper -u root -p  -S /data/mysql-5.5./mysql.sock -B tpcctest -o /root/tpcctest

real    0m16.463s
user 0m16.436s
sys 0m2.205s
[root@localhost tpcc-mysql]# time /usr/local/mysql-5.5./bin/mysqldump -uroot -p123456 -S /data/mysql-5.5./mysql.sock tpcctest > /root/tpcctest2.sql real 0m37.875s
user 0m28.847s
sys 0m3.701s
[root@localhost tpcc-mysql]#

mydumper备份出来的是一个文件夹,mysqldump备份出来的是一个.sql文件,大小如下:

[root@localhost tpcctest]# cd ..
[root@localhost ~]# du -sh tpcctest
.5G tpcctest
[root@localhost ~]# du -sh tpcctest2.sql
.5G tpcctest2.sql

mydumper是多线程的,默认4个线程,可以用-t选项可以指定线程数,下面分别对不同线程进行了测试的结果:

[root@localhost tpcc-mysql]# time mydumper -u root -p  -S /data/mysql-5.5./mysql.sock -B tpcctest -o -t  /root/tpcctest                       

real    0m16.014s
user 0m16.671s
sys 0m2.083s
[root@localhost tpcc-mysql]# time mydumper -u root -p -S /data/mysql-5.5./mysql.sock -B tpcctest -o -t /root/tpcctest real 0m17.494s
user 0m16.283s
sys 0m2.771s
[root@localhost tpcc-mysql]# time mydumper -u root -p -S /data/mysql-5.5./mysql.sock -B tpcctest -o -t /root/tpcctest real 0m14.774s
user 0m16.662s
sys 0m2.814s
[root@localhost tpcc-mysql]# time mydumper -u root -p -S /data/mysql-5.5./mysql.sock -B tpcctest -o -t /root/tpcctest real 0m16.382s
user 0m16.603s
sys 0m2.692s

可以看到,并不是线程数多,备份的速度就会快。

还原速度对比:

下面分别是myloader和mysql直接还原的速度对比:

[root@localhost ~]# time myloader -u root -p  -h localhost -S /data/mysql-5.5./mysql.sock -B tpcctest -d /root/tpcctest   

real    4m55.778s
user 0m3.733s
sys 0m1.075s
[root@localhost ~]# time mysql -uroot -p123456 -S /data/mysql-5.5./mysql.sock tpcctest < /root/tpcctest2.sql     

real    7m35.524s
user 0m34.156s
sys 0m2.032s

用mydumper备份单个表的例子:

[root@localhost ~]# mydumper -u root -p  -h localhost -S /data/mysql-5.5./mysql.sock -B tpcctest -T customer -o /root/customer
[root@localhost ~]# cd customer/
[root@localhost customer]# ls
metadata tpcctest.customer-schema.sql tpcctest.customer.sql

mydumper还有很多功能,有兴趣的朋友,可以自己研究下^.^

有一个朋友说他线上用mydumper备份176G的数据,大概用了21分钟,但他是用最大系统资源来备份的(服务器配置:raid 10 raid卡没有缓存 Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz 32核  32G内存)

总结:

一、mydumper的备份速度比mysqldump快上不少,因为mydumper支持多线程备份和恢复

二、虽然可以支持多线程备份,但并不是线程越多,速度就越快

三、mydumper的功能也比较强大,参数比较多,可以根据需求,灵活配置

四、mydumper备份和恢复的快慢,和服务器硬件配置有很大的关系,本实验测试只是举例子。

参考书籍:《MySQL管理之道:性能调优、高可用与监控》

作者:陆炫志

出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111

您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

MySQL多线程备份工具mydumper的更多相关文章

  1. MySQL多线程备份工具:mydumper

    MySQL多线程备份工具:mydumper http://www.orczhou.com/index.php/2011/12/how-to-split-mysqldump-file/ Mydumper ...

  2. MySQL多线程备份工具mydumper 之 RDS外部实例迁移平台

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.Format_description_event问题: BINLOG ' kTXkUxMKAAAALQA ...

  3. MySQL数据库之多线程备份工具mydumper

    Mydumper介绍: 1)Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具 2)特性: 轻量级C语言编写 执行速度比mysqldump快10倍 快速的文件压缩 支持导 ...

  4. MySQL 逻辑备份工具

    简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyIS ...

  5. Mysql自动备份工具1.0(2013年11月15日更新)

    Mysql自动备份工具1.0 下载地址 2013-11-15 1.解决日历控件在Windows7/8/8.1环境下遮挡按钮问题:2.解决按月备份当月没有该日期问题: 2013-11-13 1.Mysq ...

  6. mysql多线程备份与还原工具mydumper

    (一)mydumper介绍 之前我们已经学过如何使用mysqldump备份恢复数据库:<mysql逻辑备份与还原工具mysqldump>,就目前来说,mysqldump是使用最广泛的MyS ...

  7. MySQL逻辑备份利器-mydumper

    关于mydumper的简介和下载请访问:https://launchpad.net/mydumper 简言之,mydumper是多线程逻辑备份,对于表和数据量很大的情况下,建议使用mydumper提高 ...

  8. mysql innobackupex备份工具

    先简单介绍一下这个工具:innobackupexinnobackupex比xtarbackup有更强的功能,它整合了xtrabackup和其他的一些功能,他不但可以全量备份/恢复,还可以基于时间的增量 ...

  9. Mysql多线程性能测试工具sysbench 安装、使用和测试

    From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨 ...

随机推荐

  1. C#中几种创建对象的方式的对比

    最近学习了msil,发现了很多好玩的,今天介绍一个用IL来创建对象的方式 1.最常见的两种创建对象方式 public static T Create<T>() where T : new( ...

  2. eclipse对maven项目进行打war包

    1. 利用pom.xml进行打包 右键项目名称或者pom.xml文件,选择debugAS或者runAS,选择maven install执行成功之后日志会打印输出位置 2. 使用命令打包 右键项目名称, ...

  3. webapi Route 特性

    转载:http://www.th7.cn/Program/net/201410/302571.shtml ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程 ...

  4. 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. 【刷题】BZOJ 4000 [TJOI2015]棋盘

    Description Input 输入数据的第一行为两个整数N,M表示棋盘大小.第二行为两个整数P,K, 表示攻击范围模板的大小,以及棋子在模板中的位置.接下来三行, 每行P个数,表示攻击范围的模版 ...

  6. 【Revit API】墙体分割

    Revit中没有分割墙体的直接方法,一般采用调整原墙体的长度,再复制自身,调整复制体的长度.话不多说,直接上代码 public static void WallCopy(Document doc, X ...

  7. 51nod1229 序列求和 V2 【数学】

    题目链接 B51nod1229 题解 我们要求 \[\sum\limits_{i = 1}^{n}i^{k}r^{i}\] 如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\) ...

  8. POJ 3259 Wormholes(最短路径,求负环)

    POJ 3259 Wormholes(最短路径,求负环) Description While exploring his many farms, Farmer John has discovered ...

  9. 《剑指offer》— JavaScript(28)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超 ...

  10. 【CSS】盒子模型的计算

    1.标准盒子的尺寸计算 盒子自身的尺寸:内容的宽高+两侧内边距+两侧边框 盒子在页面中占位的尺寸:内容的宽高+两侧内边距+两侧边框+两侧外边距 <!DOCTYPE html> <ht ...