• MySQL多线程备份工具mydumper


    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.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, -v0=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内存) 

    总结:

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

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

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

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

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

    作者:陆炫志

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

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

  • 相关阅读:
    在Visual Studio 2019中配置OpenCV环境
    Java中的垃圾回收
    线程池
    Java中锁优化
    二叉树的几种遍历
    java中Comparator的用法(排序、分组)
    java8 stream
    Java后台生成二维码并上传到阿里云OSS
    代码生成器的成长过程
    软件的军工六性
  • 原文地址:https://www.cnblogs.com/xuanzhi201111/p/4190713.html
Copyright © 2020-2023  润新知