mysql備份之mydumper工具使用詳解


4.2.4 myduper工具

mysql自帶的mysqldump是一個只能支持單線程的工具,只能逐個導出表,而mydumper是一個針對mysql和drizzle的高性能多線程的備份工具,備份速度遠遠高於mysqldump,也是邏輯備份,數據還原時候使用myloader工具。

  1. 多線程備份

    2. 因為是多線程邏輯備份,備份后會生成多個備份文件

    3. 備份時對MyISAM表施加FTWRL(FLUSH TABLES WITH READ LOCK),會阻塞DML語句

    4. 保證備份數據的一致性

    5. 支持文件壓縮

    6. 支持導出binlog

    7. 支持多線程恢復

    8. 支持以守護進程模式工作,定時快照和連續二進制日志

    9. 支持將備份文件切塊

     

    安裝軟件開始。。。。。。。。。。。。。。。

    1. 安裝mydumper
    2. 鏈接: https://launchpad.net/mydumper/+download,或者執行git clone https://github.com/maxbube/mydumper,這里需要安裝git注意。或者執行wget https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
    3. 把下載好的包傳到/usr/local/目錄下
    4. 准備cmke工具和安裝依賴包

      Yum install cmke*

      Yum install glib2-devel mysql-devel zlib-devel prce-devel openssl-devel

       

      一般來說裝上面的依賴就足夠的,在解壓包目錄下有readme文檔里面也說明要裝以上依賴。

    發現有一個包沒有是pcre-devel,說明需要去額外安裝一下yum源了

    一般如下操作即可

     

     

     

    題外部分。。。。。。。。依賴都裝好這部分可不看

     

    下載阿里雲源weget -O/etc/yum.repos.d/CentOS-Base-epel.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    清理緩存

    yum clean all

    重新生成緩存    

    yum makecache

    升級yum源

    yum uptade

     

    下載網易源

    wget -P /etc/yum.repos.d http://mirrors.163.com/.help/CentOS7-Base-163.repo

    清理緩存

    yum clean all

    重新生成緩存

    yum makecache

    升級yum源

    yum uptade

     

    下載網易源

    wget -P /etc/yum.repos.d http://mirrors.163.com/.help/CentOS7-Base-163.repo

    清理緩存

    yum clean all

    重新生成緩存

    yum makecache

    升級yum源

    yum uptade

     

    如果都不行就要去下載包https://vault.centos.org/7.6.1810/os/x86_64/Packages/

     

    放到想要的目錄下執行以下命令

    rpm -Uvh ./*.rpm --nodeps --force

    下圖使用第三種方式

     

    依賴賴都裝好了就開始裝軟件了。

     

     

    正題部分。。。。。。。。。。

    我放在/usr/local/下面執行解壓如圖所示

    進入解壓目錄

    執行cmake .

    make &&make install

     

    不出所料的話是成功安裝,但是在執行myduper --help的時候會出現如圖問題

    報錯說明找不到這個共享庫。

     

    按照以下操作。

    可以看到上面有個報錯,就是共享庫找不到。那就去找。

    按照它給出的共享庫並拷貝到庫目錄下

    發現命令可以正常使用了。

     

    命令參數說明

    -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

     

    mydumper的工作過程

    a、連接目標數據庫;

    b、通過show processlist來判斷是否有長查詢,根據參數long-query-guard和kill-long-queries決定退出或殺掉長查詢;

    c、鎖定myisam表,flush tables with read lock;針對innodb table開啟事務,start transaction;

    d、創建worker子線程,缺省為4個;

    e、確定候選表,根據類別分別插入innodb_table,non_innodb_table以及table_schemas鏈表(表結構);

    f、將候選表通過g_async_queue_push加入任務隊列(隊列最后元素是thread shutdown),由worker子線程從隊列中讀取表信息並執行數據導出

    g、執行unlock tables,處理完myisam表后立即解鎖,以減少鎖定時間;

    h、等待worker退出;

     

    備份文件相關信息

    a、所有的備份文件在一個目錄中,未指定時為當前目錄, 且自動生成備份日期時間文件夾,如export-20150703-145806

    b、目錄中包含一個 metadata 文件,該文件記錄了備份時間點的二進制日志文件名,日志的寫入位置

    c、如果是在從庫進行備份,還會記錄備份時同步至主庫的二進制日志文件及寫入位置

    d、每個表有兩個備份文件:database.table-schema.sql 表結構文件,database.table.sql 表數據文件

    e、如果對表文件分片,將生成多個備份數據文件,可以指定行數或指定大小分片

     

    #還原test庫,先模擬事故。

    #恢復,發現test數據庫回來了,查看表也是完整的。

    #備份單個表

    # mydumper -u root -p 123456 -B test -T L -o /data/backup/

    #還原L表,為了體驗還原的效果先把表里的數據刪除,在生產中注意備份。

    #恢復表數據,會發現表數據已經恢復。如下

    #myloader -u root -p 123456 -B test -o L -d /data/backup/

    #備份多個表

    # mydumper -u root -p 123456 -B test -T test,L -o /data/backup/

    #恢復表數據,同樣刪除表或者刪除表數據,表如果刪掉了可能需要建立一個空表恢復,看到表數據被刪了。

    #恢復表數據。

    # myloader -u root -p 123456 -B test -o test,L -d /data/backup/

     

    #備份表L的數據,不備份表結構

    #mydumper -u root -p 123456 -B test -T L -m -o /data/backup/

    #備份test庫下的表L,並且進行壓縮:

    #mydumper -u root -p 123456 -B test -T L -c -o /data/backup/

     

     

    #mysqldump和mydumper的速度對比

    #備份時間對比

    先使用mysqldump進行全庫備份,發現大概用了0.192s

    #time mysqldump --set-gtid-purged=off --single-transaction -uroot -p123456 -A >all.sql

    再使用mydumper全庫備份,發現用了0.157s,因為數據量不夠大,所以看起來和mysqldump差距不太大,但是在大數據量的情況下,差距是很明顯的。

     

    #time mydumper -u root -p 123456 -o /data/backup/

     

    #測試恢復時間對比

    首先用mysql恢復test,時間消耗為0.67s

    再用myloader恢復test庫,時間的消耗為0.62s

    #如果數據量更大一點會比較明顯,不過也看得出mydumper的備份和恢復都比musqldump快。

     

     

    5、常用備份示例:

    ###備份單個庫

    # mydumper -u leshami -p pwd -B sakila -o /tmp/bak

     

    ###備份所有數據庫,全庫備份期間除了information_schema與performance_schema之外的庫都會被備份

    # mydumper -u leshami -p pwd -o /tmp/bak

     

    ###備份單表

    # mydumper -u leshami -p pwd -B sakila -T actor -o /tmp/bak

     

    ###備份多表

    # mydumper -u leshami -p pwd -B sakila -T actor,city -o /tmp/bak

     

    ###當前目錄自動生成備份日期時間文件夾,不指定-o參數及值時,如文件夾為:export-20150703-145806

    mydumper -u leshami -p pwd -B sakila -T actor

     

    ###不帶表結構備份表

    # mydumper -u leshami -p pwd -B sakila -T actor -m

     

    ###壓縮備份及連接使用壓縮協議(非本地備份時)

    # mydumper -u leshami -p pwd -B sakila -o /tmp/bak -c -C

     

    ###備份特定表

    # mydumper -u leshami -p pwd -B sakila --regex=actor* -o /tmp/bak

     

    ###過濾特定庫,如本來不備份mysql及test庫

    # mydumper -u leshami -p pwd -B sakila --regex '^(?!(mysql|test))' -o /tmp/bak

     

    ###基於空表產生表結構文件

    # mydumper -u leshami -p pwd -B sakila -T actor -e -o /tmp/bak

     

    ##設置長查詢的上限,如果存在比這個還長的查詢則退出mydumper,也可以設置殺掉這個長查詢

    #mydumper -u leshami -p pwd -B sakila --long-query-guard 200 --kill-long-queries

     

    ###備份時輸出詳細日志

    # mydumper -u leshami -p pwd -B sakila -T actor -v 3 -o /tmp/bak

     

    ###導出binlog,使用-b參數,會自動在導出目錄生成binlog_snapshot文件夾及binlog

    # mydumper -u leshami -p pwd -P 3306 -b -o /tmp/bak


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM