mysqldump與mydumper對比測試

1 引言

  mysqldump是mysql官方自帶的備份工具,是一個很好用的mysql數據轉移工具,具備兼容強強、跨版本等特色mysql

  mydumper是一個針對MySQL的高性能多線程備份和恢復工具,它提供了併發備份功能,備份效率有很大提升,而且按照單表進行備份,表恢復更加方便。c++

  mydumper主要特性有:正則表達式

       • 輕量級C語言寫的sql

       • 執行速度比mysqldump快10倍數據庫

       • 事務性和非事務性表一致的快照(適用於0.2.2以上版本)多線程

       • 快速的文件壓縮併發

       • 支持導出binlogsocket

       • 多線程恢復(適用於0.2.1以上版本)工具

       • 以守護進程的工做方式,定時快照和連續二進制日誌(適用於0.5.0以上版本)性能

       • 開源 (GNU GPLv3)

  本文將對兩個工具進行簡單的對比測試,並給出參考結果。

2 安裝及使用方式

因爲mysqldump使用較多,比較熟悉,因此這裏主要介紹mydumper的安裝使用。

2.1 Mydumper安裝

Mydumper下載地址:https://launchpad.net/mydumper,最新的穩定版本是0.6.2,下載以後按照以下方式安裝:      

1 # yum install glib2-devel mysql-devel zlib-devel pcre-devel gcc-c++
2 # wget http://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz
3 # tar zxvf mydumper-0.6.2.tar.gz
4 # cd mydumper-0.6.2
5 # cmake .
6 # make
7 # make install

 

2.2 mydumper 經常使用參數

  mydumper安裝完成以後包括導出的mydumper工具和導入的myloader,主要參數以下:

 mydumper參數介紹:
         -B, --database 須要備份的庫
         -T, --tables-list 須要備份的表,用,分隔
         -o, --outputdir 輸出目錄
         -s, --statement-size Attempted size of INSERT statement in bytes, default 1000000
         -r, --rows 試圖分裂成不少行塊表
         -c, --compress 壓縮輸出文件
         -e, --build-empty-files 即便表沒有數據,仍是產生一個空文件
         -x, --regex 支持正則表達式
         -i, --ignore-engines 忽略的存儲引擎,用,分隔
         -m, --no-schemas 不導出表結構
         -k, --no-locks 不執行臨時共享讀鎖 警告:這將致使不一致的備份
         -l, --long-query-guard 長查詢,默認60s
         --kill-long-queries kill掉長時間執行的查詢(instead of aborting)
         -b, --binlogs 導出binlog
         -D, --daemon 啓用守護進程模式
         -I, --snapshot-interval dump快照間隔時間,默認60s,須要在daemon模式下
         -L, --logfile 日誌文件
         -h, --host
         -u, --user
         -p, --password
         -P, --port
         -S, --socket
         -t, --threads 使用的線程數,默認4
         -C, --compress-protocol 在mysql鏈接上使用壓縮
         -V, --version
         -v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2


myloader參數介紹:
         -d, --directory 導入備份目錄
         -q, --queries-per-transaction 每次執行的查詢數量, 默認1000
         -o, --overwrite-tables 若是表存在刪除表
         -B, --database 須要還原的庫
         -e, --enable-binlog 啓用二進制恢復數據
         -h, --host
         -u, --user
         -p, --password
         -P, --port
         -S, --socket
         -t, --threads 使用的線程數量,默認4
         -C, --compress-protocol 鏈接上使用壓縮
         -V, --version
         -v, --verbose 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2     

 

 

2.3 使用例子

2.3.1 導出數據庫備份

  mydumper備份時須要指定一個備份目錄,不能像mysqldump同樣備份整個庫指定到某個特定的sql文件:

1 mydumper -u root -p ${MYSQLPASSWD}  -B ${DB_NAME} -o ${BACKUPDIR} -t 4

 

  導出的文件以下圖所示:

 

  每一個代表後接schema的sql文件的是表結構文件,另外一個是表數據,若是表沒有數據默認只有一個schema的文件,能夠加上-e參數強制生成一個空的數據文件。若是加上-c參數就會對每一個導出的文件進行壓縮打包,以下圖所示:

 

2.3.2 導入數據庫備份

1 myloader -u root -p ${MYSQLPASSWD} -d ${BACKUPDIR} -o -B ${DB_NAME}

 

3 對比測試

  測試方式:分別採用mysqldump分表備份方式和mydumper的方式,mydumper默認4個線程,對單個或多個庫進行備份,主要觀察備份時間以及備份期間機器的CPU使用狀況。

  對單個數據庫進行備份狀況,默認採用4個線程同時備份:

 

 

200M

4G

7G

30G

mysqldump

8s

2m58s

5m50s

13m13s

mydumper

4s

1m38s

2m56s

7m59s

  對多個數據庫連續備份,總共約8G大小的庫

方式

時間

mysqldump

5m14s

mydumper

2m05s

  在測試過程當中,觀察機器的CPU使用狀況,採用mysqldump的CPU使用約在98%左右,採用mydumper的狀況下CPU使用約在200%-400%之間。因此對於消耗CPU的遊戲來講,採用mydumper無疑會增大CPU消耗負擔,而且可能對遊戲產生影響,因此並不太建議採用mydumper,而若是是專門的數據庫而且CPU較爲空閒的狀況,能夠採用,適當增多線程數,能夠更快的完成備份。

  另外在標配的單盤的機器上測試的時候發下,線程數設置爲2的時候的時候,IO已經跑滿了,相對於線程數爲1的時候速度有顯著提高,可是在IO跑滿以後,設置線程數爲四、八、10,線程數越大,CPU消耗會越大,可是對整個備份時間並無太大影響了,因此在cpu足夠空閒的狀況下,IO是影響mydumper性能的瓶頸所在,使用的時候根據實際IO狀況合理設置線程數。

相關文章
相關標籤/搜索