您好,登錄后才能下訂單哦!
1、簡介
邏輯備份小鋼炮--mydumper是針對MySQL的高性能多線程備份工具。該工具是由MySQL、Facebook、skysql公司的開發人員一起開發的。是由輕量級C語言開發;執行速度據說比mysqldump快10倍;支持事務和非事務表的一致性備份;還支持導出binlog;支持多線程備份;支持以守護進程的形式工作,定時備份;并且是開源的,其協議為GPLv3.
2、使用方法
root@dd:~/mydumper-0.6.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,這個參數不能太小,不然會報 Row bigger than statement_size for tools.t_serverinfo
-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秒,超過該時間則會報錯:There are queries in PROCESSLIST running longer than 60s, aborting dump
--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
3、原理解析
1)該工具在--daemo模式下支持以守護進行形式啟動,默認每60s進行一次備份。間隔時間由--snapshot-interval控制。
2)首先會創建一個MySQL服務的連接
3)然后在MySQL上執行show processlist,根據參數long-query-guard和kill-long-queries決定退出或殺掉長查詢;
4)根據是否有--lock-all-tables,進行鎖表:LOCK TABLE tn READ或者FLUSH TABLES WITH READ LOCK;然后執行START TRANSACTION;
5)創建4個備份表的子線程
6)創建1個work thread后,g_async_queue_pop(conf.ready);此時conf.ready為空需要sleep等待。
7)work線程執行:連接mysql;設置隔離級別RR;start transaction;g_async_queue_push(conf->ready,GINT_TO_POINTER(1));然后main函數的g_async_queue_pop掛住的地方可以喚醒了,繼續創建線程或者向下走。
8)work線程接著執行:進入死循環,從隊列里pop出任務job=(struct job *)g_async_queue_pop(conf->queue);,根據任務類型進行dump。這里的并行是根據表并行的。先備份非事務表,然后備份innodb表
9)最后等所有work線程完成非事務表備份后喚醒g_async_queue_pop(conf.unlock_tables);,執行UNLOCK TABLES解鎖
10)事務結束
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。