天天看點

mydumper備份資料庫詳解(已詳細說明)

  mydumper是針對mysql資料庫備份的一個輕量級第三方的開源工具,備份方式為邏輯備份。它支援多線程,備份速度遠高于原生态的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]

注意:指令行之間要有空格 -u 使用者名  -p 密碼 之間必須有空格 

參數說明

  -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

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、常用備份示例:

1 備份單個庫  

# mydumper -u 使用者名 -p 密碼 -b 需要備份的庫名 -o /tmp/bak

  -b,需要備份的庫   -o 輸出檔案的目錄(備份輸出指定的目錄)

2 備份所有資料庫:全庫備份期間除了information_schema與performance_schema之外的庫都會被備份

# mydumper -u 使用者名 -p 密碼 -o /tmp/bak

 -o 輸出檔案的目錄(備份輸出指定的目錄)

3 備份單表

# mydumper -u 使用者名 -p 密碼 -b 庫名 -t 表名 -o /tmp/bak

   -t 需要備份的表,多表用逗号分隔 -o指定輸出備份檔案路徑 

4 備份多表

# mydumper -u 使用者名 -p 密碼 -b 庫名 -t 表1,表2 -o /tmp/bak

5、目前目錄自動生成備份日期時間檔案夾,不指定-o參數及值時預設為:export-20150703-145806

mydumper -u 使用者名 -p 密碼 -b 資料庫名字 -t 表名

6、不帶表結構備份表

# mydumper -u 使用者名 -p 密碼 -b 資料名字 -t 表名 -m

  -m 不導出表結構

7、壓縮備份及連接配接使用壓縮協定(非本地備份時)

# mydumper -u 使用者名 -p 密碼 -b 資料庫名字 -o /tmp/bak -c -c

-c, 壓縮輸出檔案 -c 在mysql連接配接上使用壓縮協定  -o 輸出檔案的目錄(備份輸出指定的目錄)

8、備份特定表

# mydumper -u 使用者名 -p 密碼 -b 資料庫名字  --regex=actor*

-o /tmp/bak

隻備份以actor*開頭的表

-x 正規表達式: 'db.table'  --regex  

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

# mydumper -u 使用者名 -p 密碼 -b 資料庫名字 --regex '^(?!(mysql|test))' -o /tmp/bak

10、基于空表産生表結構檔案

#  mydumper -u 使用者名 -p 密碼 -b 資料庫名字 -t

空表 -e -o /tmp/bak

-e 即使表沒有資料,還是産生一個空檔案 

12、備份時輸出詳細更多日志

#  mydumper -u 使用者名 -p 密碼 -b 資料庫名字 -t 空表 -v 3 -o /tmp/bak

-v 更多輸出, 0 = silent, 1 = errors, 2 = warnings, 3 = info,詳細輸出 default

2

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

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

13、導出binlog,使用-b參數,會自動在導出目錄生成binlog_snapshot檔案夾及binlog

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

總結:

mysql備份,備份資料庫、備份資料表。恢複也是恢複資料庫,恢複資料表。

參考:

mysqldump備份恢複詳解:

<a target="_blank" href="http://blog.csdn.net/u010098331/article/details/50896175">http://blog.csdn.net/u010098331/article/details/50896175</a>

<a target="_blank" href="http://blog.csdn.net/u010098331/article/details/50896725">http://blog.csdn.net/u010098331/article/details/50896725</a>

<a target="_blank" href="http://www.itopers.com/blog/posts/wp/826.html">http://www.itopers.com/blog/posts/wp/826.html</a>

<a target="_blank" href="http://www.cnblogs.com/linuxnote/p/3817698.html">http://www.cnblogs.com/linuxnote/p/3817698.html</a>

贈送:

三、使用方法

備份出來的sql檔案,檔案以資料庫開頭.表名[-schema].sql,有schema的為表的表結建構立語句,沒有的為表資料插入語句。

metadata這個檔案記錄的是當裡的binlog檔案及pos,可以使用這個資訊搭建slave.

隻備份t_task和t_guid表

隻備份以t_server開通的表

-b,--database隻能指定一個庫備份,如果需要同時備份多個資料庫,可能這樣:

--threads并發度