中国科学院大学计算机硕士,曾在新浪爱彩数据库组带DBA团队,现居新加坡。wx: lihui_dba
分类: Mysql/postgreSQL
2014-08-22 18:11:32
前言:
Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。开发人员分别来自MySQL,Facebook,SkySQL公司。
这个工具采用多线程并发,大大加快了备份(前提是磁盘io够用)和恢复的速度。是mysqldump的良好替代品。
Mydumper主要特性:
轻量级C语言写的代码
比mysqldump接近快10倍的速度
事务性和非事务性表一致的快照(适用于0.22+)
快速的文件压缩(File compression on-the-fly)
支持导出binlog
多线程恢复( 0.2.1+)
可以用守护进程的工作方式,定时的扫描和输出连续的二进制日志
开源 (GNU GPLv3)
安装:
1.从官网下载安装包
2.#yum install glib2-devel mysql-devel zlib-devel pcre-devel
#tar xvzf mydumper-0.6.1.tar.gz
# cd mydumper-0.6.1
#cmake .
#make && make install
备份恢复测试:
1.导入待测试的数据库,顺便测试mysqldump的恢复速度。
[root@localhost ~]# time mysql -uroot -pxxx mydumper < leaguelib_201408110530.sql
real 12m1.984s
user 0m17.049s
sys 0m5.808s
2.测试mydumper的导出速度。
[root@localhost ~]# time mydumper -u root -p xxx --database=mydumper --outputdir=mydumper_dir
real 0m45.906s
user 0m13.358s
sys 0m15.551s
另:导出时使用show processlist观察发现默认线程数为4
3.测试mysqldump的导出速度。
[root@localhost ~]# time mysqldump --default-character-set=utf8 --hex-blob mydumper -uroot -pxxx > leaguelib_mysqldump.sql
real 0m47.734s
user 0m15.338s
sys 0m7.275s
4.测试mydumper的导入速度。
[root@localhost mydumper_dir]# time myloader -u root -p xxx --database=mydumper -d mydumper_dir/
real 2m35.567s
user 0m2.285s
sys 0m6.118s
[root@localhost mydumper_dir]# time myloader -u root -p xxx --database=mydumper -d mydumper_dir/ -t 8
real 1m8.022s
user 0m1.424s
sys 0m2.402s
另:测试时发现默认线程数为4。
总结:
从mysqldump和mydumper备份和恢复的速度来看,备份时间相差不大,并行备份并没有带来速度的飞跃,备份时观察磁盘io都基本达到瓶颈,但mydumper的磁盘IO使用率更高、更均匀。
恢复时mydumper的多线程表现比mysqldump好很多,在使用mysql导入数据库时,单线程导入没有给磁盘IO带来压力。mydumper的8线程并发导入则几乎耗尽磁盘IO。恢复速度也达到了mysqldump的12倍。
从备份和恢复情况来看,mydumper不失为一个更好的取代mysqldump的工具,其提供的诸如备份binlog等功能也比mysqldump更丰富。
mydumper主要参数:
–host, -h 连接的mysql服务器
–user, -u 用户备份的连接用户
–password, -p
–port, -P 连接端口
–socket, -S 连接socket文件
–database, -B 需要备份的数据库
–table-list, -T 需要备份的表,用,分隔
–outputdir, -o 输出的目录
–build-empty-files ,-e 如果表数据是空,还是产生一个空文件,默认无数据则只有表结构文件
–regex, -x 支持正则表达式,如mydumper –regex ’^(?!(mysql|test))’
–ignore-engines, -i 忽略的存储引擎
–no-schemas, -m 不导出表结构
–long-query-guard 长查询,默认60s,超过则通过mydumper
–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一样
–directory, -d 要还原的数据目录
–overwrite-tables, -o Drop any existing tables when restoring schemas
mydumper --help 查看帮助信息。
参考资料: