最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 21:05:42
文檔

使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù)

使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù):mysqldump:其特征之一是在處理過(guò)程中需要對(duì)列表加以鎖定,因此如果我們需要在工作時(shí)段執(zhí)行備份工作,那么會(huì)引起DML阻塞。但一般現(xiàn)在的MySQL都有主從,備份也大部分在從上進(jìn)行,所以鎖的問(wèn)題可以不用考慮。這樣,mydumper能更好的完成備份任務(wù)。Mydump
推薦度:
導(dǎo)讀使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù):mysqldump:其特征之一是在處理過(guò)程中需要對(duì)列表加以鎖定,因此如果我們需要在工作時(shí)段執(zhí)行備份工作,那么會(huì)引起DML阻塞。但一般現(xiàn)在的MySQL都有主從,備份也大部分在從上進(jìn)行,所以鎖的問(wèn)題可以不用考慮。這樣,mydumper能更好的完成備份任務(wù)。Mydump

mysqldump:其特征之一是在處理過(guò)程中需要對(duì)列表加以鎖定,因此如果我們需要在工作時(shí)段執(zhí)行備份工作,那么會(huì)引起DML阻塞。但一般現(xiàn)在的MySQL都有主從,備份也大部分在從上進(jìn)行,所以鎖的問(wèn)題可以不用考慮。這樣,mydumper能更好的完成備份任務(wù)。
Mydumper主要特性:是一個(gè)針對(duì)MySQL和Drizzle的高性能多線程備份和恢復(fù)工具,開(kāi)發(fā)人員主要來(lái)自MySQL,Facebook,SkySQL公司。

代碼如下:
1:輕量級(jí)C語(yǔ)言寫(xiě)的
    2:執(zhí)行速度比mysqldump快10倍
    3:事務(wù)性和非事務(wù)性表一致的快照(適用于0.2.2以上版本)
    4:快速的文件壓縮
    5:支持導(dǎo)出binlog
    6:多線程恢復(fù)(適用于0.2.1以上版本)
    7:以守護(hù)進(jìn)程的工作方式,定時(shí)快照和連續(xù)二進(jìn)制日志(適用于0.5.0以上版本)
    8:開(kāi)源 (GNU GPLv3)

下載安裝:環(huán)境:Ubuntu 12.04

代碼如下:
wget https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz

安裝:解壓后,有安裝說(shuō)明

代碼如下:
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個(gè)工具:mydumper(備份),myloader(導(dǎo)入)

參數(shù):
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              需要備份的庫(kù)
  -T, --tables-list           需要備份的表,用逗號(hào)分隔
  -o, --outputdir             輸出文件的目錄
  -s, --statement-size        生成插入語(yǔ)句的字節(jié)數(shù), 默認(rèn) 1000000
  -r, --rows                  分裂成很多行塊表
  -c, --compress              壓縮輸出文件
  -e, --build-empty-files     即使表沒(méi)有數(shù)據(jù),還是產(chǎn)生一個(gè)空文件
  -x, --regex                 正則表達(dá)式: 'db.table'
  -i, --ignore-engines        忽略的存儲(chǔ)引擎,用逗號(hào)分隔
  -m, --no-schemas            不導(dǎo)出表結(jié)構(gòu)
  -k, --no-locks              不執(zhí)行共享讀鎖 警告:這將導(dǎo)致不一致的備份
  -l, --long-query-guard      設(shè)置長(zhǎng)查詢(xún)時(shí)間,默認(rèn)60秒
  --kill-long-queries         kill掉長(zhǎng)時(shí)間執(zhí)行的查詢(xún)
  -b, --binlogs               導(dǎo)出binlog
  -D, --daemon                啟用守護(hù)進(jìn)程模式
  -I, --snapshot-interval     dump快照間隔時(shí)間,默認(rèn)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               使用的線程數(shù),默認(rèn)4
  -C, --compress-protocol     在mysql連接上使用壓縮協(xié)議
  -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     每次執(zhí)行查詢(xún)數(shù)量, 默認(rèn)1000
  -o, --overwrite-tables            如果表存在則先刪除。這里注意下,使用該參數(shù),需要備份時(shí)候要備份表結(jié)構(gòu),不然會(huì)出問(wèn)題
  -B, --database                    需要還原的數(shù)據(jù)庫(kù)
  -e, --enable-binlog               啟用二進(jìn)制恢復(fù)數(shù)據(jù)
  -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                     使用的線程數(shù)量,默認(rèn)4
  -C, --compress-protocol           連接上使用壓縮協(xié)議
  -V, --version                     Show the program version and exit
  -v, --verbose                     更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

測(cè)試:測(cè)試基本用法

1:備份
代碼如下:
./mydumper -u zjy -p ##### -h 192.168.220.245 -P 3306 -B chushihua -o /home/zhoujy/bak/

備份analyzedxy數(shù)據(jù)庫(kù)到/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 */ |

上面顯示確實(shí)是4個(gè)線程(默認(rèn))在備份,查看備份文件:

代碼如下:
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把數(shù)據(jù)和表結(jié)構(gòu)分開(kāi)備份,并且把二進(jìn)制日志備份出來(lái)單獨(dú)放到一個(gè)文件中。

代碼如下:
metadata:元數(shù)據(jù) 記錄備份開(kāi)始和結(jié)束時(shí)間,以及binlog日志文件位置。
table data:每個(gè)表一個(gè)文件
table schemas:表結(jié)構(gòu)文件
binary logs: 啟用--binlogs選項(xiàng)后,二進(jìn)制文件存放在binlog_snapshot目錄下
daemon mode:在這個(gè)模式下,有五個(gè)目錄0,1,binlogs,binlog_snapshot,last_dump。
備份目錄是0和1,間隔備份,如果mydumper因某種原因失敗而仍然有一個(gè)好的快照,當(dāng)快照完成后,last_dump指向該備份。

2:還原:還原到另一臺(tái)服務(wù)器,先建立要還原的數(shù)據(jù)庫(kù)(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       |

上面顯示確實(shí)是4個(gè)線程(默認(rèn))在還原。
進(jìn)一步測(cè)試:測(cè)試一些常用的參數(shù)
1):備份指定表(-T),并且不要導(dǎo)出表結(jié)構(gòu)(-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),正則表達(dá)式備份表(-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
 

如上所示,備份文件已經(jīng)是壓縮的了(用gzip -d 解壓),并且備份出了tmp.*匹配出來(lái)的所有表,二進(jìn)制日志也被備份到了binlog_snapshot文件中,并且也是被壓縮的。
3)還原,表存在先刪除(-o):這里需要注意,使用該參數(shù),備份目錄里面需要有表結(jié)構(gòu)的備份文件。

代碼如下:
./myloader -u root -p 123456 -h 192.168.200.25 -P 3306 -o -B test -d /home/zhoujy/bak/

更多的參數(shù)效果,請(qǐng)自己測(cè)試。
最后測(cè)試:用mysqldump和mydumper進(jìn)行對(duì)比測(cè)試。

代碼如下:
#!/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()

測(cè)試了2個(gè)數(shù)據(jù)庫(kù):

1:

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

2:

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

從上面的時(shí)間來(lái)看,mydumper 確實(shí)提升了備份數(shù)據(jù),還原也同理。

總結(jié):
從上面的測(cè)試分析中看出mydumper可以提升備份還原的效率,提升多少受限于磁盤(pán)的IO能力,在使用前做好磁盤(pán)IO的評(píng)估,大家可以嘗試使用該工具。

您可能感興趣的文章:

  • mysql mysqldump只導(dǎo)出表結(jié)構(gòu)或只導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)方法
  • mysqldump備份還原和mysqldump導(dǎo)入導(dǎo)出語(yǔ)句大全詳解
  • 用mysqldump備份和恢復(fù)指定表的方法
  • Mysql導(dǎo)入導(dǎo)出工具M(jìn)ysqldump和Source命令用法詳解
  • MySQL mysqldump命令使用詳解
  • 使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時(shí)的注意事項(xiàng)
  • MySQL數(shù)據(jù)庫(kù)使用mysqldump導(dǎo)出數(shù)據(jù)詳解
  • mysql mysqldump數(shù)據(jù)備份和增量備份
  • mysql中mydumper 和 mysqldump 對(duì)比使用
  • 聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù)

    使用mydumper多線程備份MySQL數(shù)據(jù)庫(kù):mysqldump:其特征之一是在處理過(guò)程中需要對(duì)列表加以鎖定,因此如果我們需要在工作時(shí)段執(zhí)行備份工作,那么會(huì)引起DML阻塞。但一般現(xiàn)在的MySQL都有主從,備份也大部分在從上進(jìn)行,所以鎖的問(wèn)題可以不用考慮。這樣,mydumper能更好的完成備份任務(wù)。Mydump
    推薦度:
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專(zhuān)題
    Top