MySQL多線程備份工具mydumper

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, -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內存) 

 

總結:

1、mydumper的備份速度比mysqldump快上很多,由於mydumper支持多線程備份和恢復

2、雖然能夠支持多線程備份,但並非線程越多,速度就越快

3、mydumper的功能也比較強大,參數比較多,能夠根據需求,靈活配置

4、mydumper備份和恢復的快慢,和服務器硬件配置有很大的關係,本實驗測試只是舉例子。

 

參考書籍:《MySQL管理之道:性能調優、高可用與監控》

 

做者:陸炫志

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

您的支持是對博主最大的鼓勵,感謝您的認真閱讀。本文版權歸做者全部,歡迎轉載,但請保留該聲明。

相關文章
相關標籤/搜索