mydumper是一个针对MySQL和Drizzle的高性能多线程的备份和恢复工具。此工具的开发人员分别来自MySQL、Fackbook、SkySQL公司,目前已经有一些大型产品业务测试并使用了该工具。咱们在恢复数据库时也可使用myloader工具。mysql
Mydumper的主要特性包括:正则表达式
1、采用了轻量级C语言写的代码。sql
2、相比于mysqldump,其速度快了近10倍(有待测试)数据库
3、具备事务性和非事务性表一致的快照(应用于0.2.2+)缓存
4、能够快速进行文件压缩(File compression on-the-fly)服务器
5、支持导出binlog多线程
6、能够多线程恢复(适用于0.2.1+)socket
7、能够用守护进程的工做方式,定时扫描和输出连续的二进制日志工具
测试环境: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.2.tar.gz [root@localhost ~]# cd mydumper-0.6.2 [root@localhost mydumper-0.6.2]# cmake . [root@localhost mydumper-0.6.2]# 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:0=silent, 1=errors, 2=warnings, 3=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 输出模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为2
下面分别使用mydumper和mysqldump备份,看备份时间,以下:
[root@localhost tpcc-mysql]# time mydumper -u root -p 123456 -S /data/mysql-5.5.40/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.40/bin/mysqldump -uroot -p123456 -S /data/mysql-5.5.40/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 1.5G tpcctest [root@localhost ~]# du -sh tpcctest2.sql 1.5G tpcctest2.sql
mydumper是多线程的,默认4个线程,能够用-t选项能够指定线程数,下面分别对不一样线程进行了测试的结果:
[root@localhost tpcc-mysql]# time mydumper -u root -p 123456 -S /data/mysql-5.5.40/mysql.sock -B tpcctest -o -t 6 /root/tpcctest real 0m16.014s user 0m16.671s sys 0m2.083s [root@localhost tpcc-mysql]# time mydumper -u root -p 123456 -S /data/mysql-5.5.40/mysql.sock -B tpcctest -o -t 10 /root/tpcctest real 0m17.494s user 0m16.283s sys 0m2.771s [root@localhost tpcc-mysql]# time mydumper -u root -p 123456 -S /data/mysql-5.5.40/mysql.sock -B tpcctest -o -t 3 /root/tpcctest real 0m14.774s user 0m16.662s sys 0m2.814s [root@localhost tpcc-mysql]# time mydumper -u root -p 123456 -S /data/mysql-5.5.40/mysql.sock -B tpcctest -o -t 2 /root/tpcctest real 0m16.382s user 0m16.603s sys 0m2.692s
能够看到,并非线程数多,备份的速度就会快。
还原速度对比:
下面分别是myloader和mysql直接还原的速度对比:
[root@localhost ~]# time myloader -u root -p 123456 -h localhost -S /data/mysql-5.5.40/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.40/mysql.sock tpcctest < /root/tpcctest2.sql real 7m35.524s user 0m34.156s sys 0m2.032s
用mydumper备份单个表的例子:
[root@localhost ~]# mydumper -u root -p 123456 -h localhost -S /data/mysql-5.5.40/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内存)
总结:
1、mydumper的备份速度比mysqldump快上很多,由于mydumper支持多线程备份和恢复
2、虽然能够支持多线程备份,但并非线程越多,速度就越快
3、mydumper的功能也比较强大,参数比较多,能够根据需求,灵活配置
4、mydumper备份和恢复的快慢,和服务器硬件配置有很大的关系,本实验测试只是举例子。
参考书籍:《MySQL管理之道:性能调优、高可用与监控》
做者:陆炫志 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归做者全部,欢迎转载,但请保留该声明。 |