mydumper備份MySQL資料庫樣本
mydumper是針對mysqlDatabase Backup的一個輕量級第三方的開源工具,備份方式為邏輯備份。它支援多線程,備份速度遠高於原生態的mysqldump以及眾多優異特性。因此該工具是DBA們的不二選擇。本文主要描述該工具的使用方法並給出樣本。
1、mydumper的特點
a、多線程邏輯備份,生產的多個備份檔案
b、與mysqldump相同,備份時對 MyISAM 表施加FTWRL (FLUSH TABLES WITH READ LOCK), 會阻塞DML 語句
c、保證備份資料的一致性
d、支援檔案壓縮,支援匯出binlog,支援多線程恢複,支援將備份檔案切塊
e、支援以守護進程模式工作,定時快照和連續二進位日誌
2、mydumper文法
mydumper -u [USER] -p [PASSWORD] -h [HOST] -P [PORT] -t [THREADS] -b -c -B [DB] -o [directory]
參數說明
-B, --database 需要備份的庫
-T, --tables-list 需要備份的表,用逗號分隔
-o, --outputdir 輸出檔案的目錄
-s, --statement-size 產生插入語句的位元組數, 預設 1000000
-r, --rows 分裂成很多行塊表
-c, --compress 壓縮輸出檔案
-e, --build-empty-files 即使表沒有資料,還是產生一個空檔案
-x, --regex 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
3、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退出;
4、備份檔案相關資訊
a、所有的備份檔案在一個目錄中,未指定時為目前的目錄, 且自動產生備份日期時間檔案夾,如export-20150703-145806
b、目錄中包含一個 metadata 檔案,該檔案記錄了備份時間點的二進位記錄檔名,日誌的寫入位置
c、如果是在從庫進行備份,還會記錄備份時同步至主庫的二進位記錄檔及寫入位置
d、每個表有兩個備份檔案:database.table-schema.sql 表結構檔案,database.table.sql 表資料檔案
e、如果對錶檔案分區,將產生多個備份資料檔案,可以指定行數或指定大小分區
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
本文永久更新連結地址: