程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 應用mydumper多線程備份MySQL數據庫

應用mydumper多線程備份MySQL數據庫

編輯:MySQL綜合教程

應用mydumper多線程備份MySQL數據庫。本站提示廣大學習愛好者:(應用mydumper多線程備份MySQL數據庫)文章只能為提供參考,不一定能成為您想要的結果。以下是應用mydumper多線程備份MySQL數據庫正文


mysqldump:其特點之一是在處置進程中須要對列表加以鎖定,是以假如我們須要在任務時段履行備份任務,那末會惹起DML壅塞。但普通如今的MySQL都有主從,備份也年夜部門在從長進行,所以鎖的成績可以不消斟酌。如許,mydumper能更好的完成備份義務。
Mydumper重要特征:是一個針對MySQL和Drizzle的高機能多線程備份和恢停工具,開辟人員重要來自MySQL,Facebook,SkySQL公司。


1:輕量級C說話寫的
    2:履行速度比mysqldump快10倍
    3:事務性和非事務性表分歧的快照(實用於0.2.2以上版本)
    4:疾速的文件緊縮
    5:支撐導出binlog
    6:多線程恢復(實用於0.2.1以上版本)
    7:以守護過程的任務方法,准時快照和持續二進制日記(實用於0.5.0以上版本)
    8:開源 (GNU GPLv3)

下載裝置:情況:Ubuntu 12.04


wget https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz

裝置:解壓後,有裝置解釋


apt-get install libglib2.0-dev libmysqlclient15-dev zlib1g-dev libpcre3-dev g++
cmake .
make


root@dd:~/mydumper-0.5.2# cmake .
-- The CXX compiler identification is GNU
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Using mysql-config: /usr/bin/mysql_config
-- Found MySQL: /usr/include/mysql, /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libm.so;/usr/lib/x86_64-linux-gnu/librt.so;/usr/lib/x86_64-linux-gnu/libdl.so

CMake Warning at docs/CMakeLists.txt:9 (message):
  Unable to find Sphinx documentation generator


-- ------------------------------------------------
-- MYSQL_CONFIG = /usr/bin/mysql_config
-- CMAKE_INSTALL_PREFIX = /usr/local
-- BUILD_DOCS = ON
-- RUN_CPPCHECK = OFF
-- Change a values with: cmake -D<Variable>=<Value>
-- ------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mydumper-0.5.2
root@dd:~/mydumper-0.5.2# make
Scanning dependencies of target mydumper
[ 20%] Building C object CMakeFiles/mydumper.dir/mydumper.c.o
[ 40%] Building C object CMakeFiles/mydumper.dir/binlog.c.o
[ 60%] Building C object CMakeFiles/mydumper.dir/server_detect.c.o
[ 80%] Building C object CMakeFiles/mydumper.dir/g_unix_signal.c.o
Linking C executable mydumper
[ 80%] Built target mydumper
Scanning dependencies of target myloader
[100%] Building C object CMakeFiles/myloader.dir/myloader.c.o
Linking C executable myloader
[100%] Built target myloader

生成2個對象:mydumper(備份),myloader(導入)

參數:
mydumper:

root@dd:~/mydumper-0.5.2# ./mydumper --help
Usage:
  mydumper [OPTION...] multi-threaded MySQL dumping

Help Options:
  -?, --help                  Show help options

Application Options:
  -B, --database              須要備份的庫
  -T, --tables-list           須要備份的表,用逗號分隔
  -o, --outputdir             輸入文件的目次
  -s, --statement-size        生成拔出語句的字節數, 默許 1000000
  -r, --rows                  決裂成許多行塊表
  -c, --compress              緊縮輸入文件
  -e, --build-empty-files     即便表沒稀有據,照樣發生一個空文件
  -x, --regex                 正則表達式: 'db.table'
  -i, --ignore-engines        疏忽的存儲引擎,用逗號分隔
  -m, --no-schemas            不導出表構造
  -k, --no-locks              不履行同享讀鎖 正告:這將招致紛歧致的備份
  -l, --long-query-guard      設置長查詢時光,默許60秒
  --kill-long-queries         kill失落長時光履行的查詢
  -b, --binlogs               導出binlog
  -D, --daemon                啟用守護過程形式
  -I, --snapshot-interval     dump快照距離時光,默許60s,須要在daemon形式下
  -L, --logfile               日記文件
  -h, --host                  The host to connect to
  -u, --user                  Username with privileges to run the dump
  -p, --password              User password
  -P, --port                  TCP/IP port to connect to
  -S, --socket                UNIX domain socket file to use for connection
  -t, --threads               應用的線程數,默許4
  -C, --compress-protocol     在mysql銜接上應用緊縮協定
  -V, --version               Show the program version and exit
  -v, --verbose               更多輸入, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

myloader:

root@dd:~/mydumper-0.5.2# ./myloader --help
Usage:
  myloader [OPTION...] multi-threaded MySQL loader

Help Options:
  -?, --help                        Show help options

Application Options:
  -d, --directory                   備份文件地點的目次
  -q, --queries-per-transaction     每次履行查詢數目, 默許1000
  -o, --overwrite-tables            假如表存在則先刪除。這裡留意下,應用該參數,須要備份時刻要備份表構造,否則會出成績
  -B, --database                    須要復原的數據庫
  -e, --enable-binlog               啟用二進制恢單數據
  -h, --host                        The host to connect to
  -u, --user                        Username with privileges to run the dump
  -p, --password                    User password
  -P, --port                        TCP/IP port to connect to
  -S, --socket                      UNIX domain socket file to use for connection
  -t, --threads                     應用的線程數目,默許4
  -C, --compress-protocol           銜接上應用緊縮協定
  -V, --version                     Show the program version and exit
  -v, --verbose                     更多輸入, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

測試:測試根本用法

1:備份

./mydumper -u zjy -p ##### -h 192.168.220.245 -P 3306 -B chushihua -o /home/zhoujy/bak/

備份analyzedxy數據庫到/home/zhoujy/bak/ 目次中,檢查能否多線程:


| 4937639 | zjy  | 192.168.200.25:34781  | NULL| Query   |      0 | NULL              | show processlist |
| 4937677 | zjy  | 192.168.200.25:34791  | NULL| Query   |     10 | Writing to net    | SELECT /*!40001 SQL_NO_CACHE */|
| 4937678 | zjy  | 192.168.200.25:34792  | NULL| Query   |      5 | Writing to net    | SELECT /*!40001 SQL_NO_CACHE */ |
| 4937679 | zjy  | 192.168.200.25:34793  | NULL| Query   |     10 | Writing to net    | SELECT /*!40001 SQL_NO_CACHE */ |
| 4937680 | zjy  | 192.168.200.25:34794  | NULL| Query   |     10 | Writing to net    | SELECT /*!40001 SQL_NO_CACHE */ |

下面顯示確切是4個線程(默許)在備份,檢查備份文件:


root@zhoujy:/home/zhoujy/bak# ls -lh
-rw-r--r-- 1 root root  322 2013-11-14 17:59 chushihua.dba_hospital_all_name-schema.sql
-rw-r--r-- 1 root root  16M 2013-11-14 17:59 chushihua.dba_hospital_all_name.sql
-rw-r--r-- 1 root root  221 2013-11-14 17:59 chushihua.dba_hospital-schema.sql
-rw-r--r-- 1 root root  658 2013-11-14 17:59 chushihua.dba_hospital.sql
-rw-r--r-- 1 root root  198 2013-11-14 17:59 chushihua.dba_jobTitle-schema.sql
-rw-r--r-- 1 root root  300 2013-11-14 17:59 chushihua.dba_jobTitle.sql
-rw-r--r-- 1 root root  261 2013-11-14 17:59 chushihua.dba_locatedCity-schema.sql
-rw-r--r-- 1 root root 202K 2013-11-14 17:59 chushihua.dba_locatedCity.sql

剖析:mydumper把數據和表構造離開備份,而且把二進制日記備份出來零丁放到一個文件中。


metadata:元數據 記載備份開端和停止時光,和binlog日記文件地位。
table data:每一個表一個文件
table schemas:表構造文件
binary logs: 啟用--binlogs選項後,二進制文件寄存在binlog_snapshot目次下
daemon mode:在這個形式下,有五個目次0,1,binlogs,binlog_snapshot,last_dump。
備份目次是0和1,距離備份,假如mydumper因某種緣由掉敗而依然有一個好的快照,當快照完成後,last_dump指向該備份。

2:復原:復原到另外一台辦事器,先樹立要復原的數據庫(chushihua)


./myloader -u root -p 123456 -h 192.168.200.25 -P 3307 -B chushihua -d /home/zhoujy/bak/

和備份一樣檢查能否多線程:


| 19 | root        |      | NULL      | Query   |     0 | init  | show   processlist|
| 30 | root        |      | chushihua | Query   |     5 | update| INSERT INTO       |
| 31 | root        |      | chushihua | Query   |     5 | update| INSERT INTO       |
| 32 | root        |      | chushihua | Query   |     5 | update| INSERT INTO       |
| 33 | root        |      | chushihua | Query   |     5 | update| INSERT INTO       |

下面顯示確切是4個線程(默許)在復原。
進一步測試:測試一些經常使用的參數
1):備份指定表(-T),而且不要導出表構造(-m)


./mydumper -u root-p 123456 -h 192.168.220.252 -P 3306 -m -B test -T b,a,c,d,e,g,f,h,i -o /home/zhoujy/bak/

zhoujy@zhoujy:~/bak$ ls -lh
-rw-rw-r-- 1 zhoujy zhoujy 3.4K 2013-11-14 20:57 test.a.sql
-rw-rw-r-- 1 zhoujy zhoujy 1.6M 2013-11-14 20:57 test.b.sql
-rw-rw-r-- 1 zhoujy zhoujy 7.8M 2013-11-14 20:57 test.c.sql
-rw-rw-r-- 1 zhoujy zhoujy 1.7M 2013-11-14 20:57 test.d.sql
-rw-rw-r-- 1 zhoujy zhoujy 303K 2013-11-14 20:57 test.e.sql
-rw-rw-r-- 1 zhoujy zhoujy 517K 2013-11-14 20:57 test.f.sql
-rw-rw-r-- 1 zhoujy zhoujy 646K 2013-11-14 20:57 test.g.sql
-rw-rw-r-- 1 zhoujy zhoujy 394K 2013-11-14 20:57 test.h.sql
-rw-rw-r-- 1 zhoujy zhoujy  34K 2013-11-14 20:57 test.i.sql
-rw-rw-r-- 1 zhoujy zhoujy   75 2013-11-14 20:57 metadata

 2)緊縮備份文件(-c),備份binlog(-b),正則表達式備份表(-x)

 
 ./mydumper -u root -p 123456 -h 192.168.200.25 -P 3306 -m -c -b --regex=tmp.* -B test  -o /home/zhoujy/bak/

drwx------ 2 zhoujy zhoujy 4.0K 2013-11-14 21:16 binlog_snapshot
-rw-rw-r-- 1 zhoujy zhoujy  133 2013-11-14 21:16 metadata
-rw-rw-r-- 1 zhoujy zhoujy  94K 2013-11-14 21:16 test.tmp_0808.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy  75K 2013-11-14 21:16 test.tmp_0809.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy  25K 2013-11-14 21:16 test.tmp_0813.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 208K 2013-11-14 21:16 test.tmp_0826.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy  915 2013-11-14 21:16 test.tmp_0827.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy  901 2013-11-14 21:16 test.tmp_0912.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 2.1K 2013-11-14 21:16 test.tmp_0916.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 622K 2013-11-14 21:16 test.tmp_0918_a.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy  28M 2013-11-14 21:16 test.tmp_0918_ff.sql.gz
 

如上所示,備份文件曾經是緊縮的了(用gzip -d 解壓),而且備份出了tmp.*婚配出來的一切表,二進制日記也被備份到了binlog_snapshot文件中,而且也是被緊縮的。
3)復原,表存在先刪除(-o):這裡須要留意,應用該參數,備份目次外面須要有表構造的備份文件。


./myloader -u root -p 123456 -h 192.168.200.25 -P 3306 -o -B test -d /home/zhoujy/bak/

更多的參數後果,請本身測試。
最初測試:用mysqldump和mydumper停止比較測試。


#!/usr/bin/env python
#coding=utf-8
import MySQLdb
import os
import sys
import time

backup = os.system('')

def mysqldump_data():
    t1 = time.time()
    backup = os.system('mysqldump --no-defaults -uroot -p123456 -h192.168.200.25 --default-character-set=utf8 test > /home/zhoujy/test.bak')
    t2 = time.time()
    t = round(t2-t1)
    print "mysqldump Cost Time %s" %t

def mydumper_data():
    t1 = time.time()
    backup = os.system('mydumper -u root -p 123456 -h 192.168.200.25 -P 3306 -B test -o /home/zhoujy/bak/')
    t2 = time.time()
    t = round(t2-t1)
    print "mydumper Cost Time %s" %t

if __name__ =='__main__':
    mysqldump_data()
    mydumper_data()

測試了2個數據庫:

1:

mysqldump Cost Time :162s
mydumper Cost Time :61s

2:

mysqldump Cost Time :483s
mydumper Cost Time :337s

從下面的時光來看,mydumper 確切晉升了備份數據,復原也同理。

總結:
從下面的測試剖析中看出mydumper可以晉升備份復原的效力,晉升若干受限於磁盤的IO才能,在應用前做好磁盤IO的評價,年夜家可以測驗考試應用該對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved