MySQL 自身的 mysqldump 工具支持單線程工作, 依次一個個導出多個表,沒有一個并行的機 ,這就使得它無法迅速的備份數據。
mydumper 作為一個實用工具,能夠良好支持多線程工作, 可以并行的多線程的從表中讀入數據并同時寫到不同的文件里 ,這使得它在處理速度方面快于傳統的 mysqldump 。其特征之一是在處理過程中需要對列表加以鎖定,因此如果我們需要在工作時段執行備份工作,那么會引起 DML 阻塞。但一般現在的 MySQL 都有主從,備份也大部分在從上進行,所以鎖的問題可以不用考慮。這樣, mydumper 能更好的完成備份任務。
mydumper 特性
多線程備份 因為是多線程邏輯備份,備份后會生成多個備份文件 備份時對 MyISAM 表施加 FTWRL (FLUSH TABLES WITH READ LOCK), 會阻塞 DML 語句 保證備份數據的一致性 支持文件壓縮 支持導出binlog 支持多線程恢復 支持以守護進程模式工作,定時快照和連續二進制日志 支持將備份文件切塊mydumper 備份機制
mydumper 工作流程圖

主要步驟概括
主線程 FLUSH TABLES WITH READ LOCK , 施加全局只讀鎖,以阻止 DML 語句寫入,保證數據的一致性 讀取當前時間點的二進制日志文件名和日志寫入的位置并記錄在 metadata 文件中,以供即使點恢復使用 N 個(線程數可以指定,默認是 4 ) dump 線程 START TRANSACTION WITH CONSISTENT SNAPSHOT ; 開啟讀一致的事物 dump non-InnoDB tables , 首先導出非事物引擎的表 主線程 UNLOCK TABLES 非事物引擎備份完后,釋放全局只讀鎖 dump InnoDB tables , 基于事物導出 InnoDB 表 事物結束 備份所生成的文件所有的備份文件在一個目錄中,目錄可以自己指定
目錄中包含一個 metadata 文件
記錄了備份數據庫在備份時間點的二進制日志文件名,日志的寫入位置,
如果是在從庫進行備份,還會記錄備份時同步至主庫的二進制日志文件及寫入位置
每個表有兩個備份文件:
如果對表文件分片,將生成多個備份數據文件,可以指定行數或指定大小分片
安裝使用實例
假設現有2臺DB服務器,分別用于A業務與B業務,其中A業務比較重要,需要對A業務的1個DB(TaeOss)進行熱備,大概有40G的數據,并用業務B的DB服務器作為備機,服務器分布如下:
10.137.143.151 A業務
10.137.143.152 B業務
假設要達到的要求是:
在導出A業務的DB(TaeOss)時,不能對A業務有影響。同時在B業務的DB服務器上進行恢復時,也不能有較大影響,盡量控制在1分鐘以內。
新聞熱點
疑難解答