標籤:多線程 download local 檔案壓縮
下載安裝
yum -y install cmake glib2 pcre pcre-devel mysql-devel
wget https://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz
tar xf mydumper-0.6.2.tar.gz
cd mydumper-0.6.2
cmake .
make && make install
注釋:如果只要協助可以這樣編譯make doc_html
安裝之後產生兩個二進位命令/usr/local/bin/mydumper(備份)和/usr/local/bin/myloader(恢複)
mydumper特性
mydumper備份機制
http://www.mysqldumper.net/
主要步驟概括
主線程 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檔案
記錄了備份資料庫在備份時間點的二進位記錄檔名,日誌的寫入位置,
如果是在從庫進行備份,還會記錄備份時同步至從庫的二進位記錄檔及寫入位置
3. 每個表有兩個備份檔案:
database.table-schema.sql 表結構檔案
database.table.sql 表資料檔案
如果對錶檔案分區,將產生多個備份資料檔案,可以指定行數或指定大小分區
mydumper參數詳解###############################################
-B, --database 要備份的資料庫,不指定則備份所有庫
-T, --tables-list 需要備份的表,名字用逗號隔開
-o, --outputdir 備份檔案輸出的目錄
-s, --statement-size 產生的insert語句的位元組數,預設1000000
-r, --rows 將表按行分塊時,指定的塊行數,指定這個選項會關閉 --chunk-filesize
-F, --chunk-filesize 將表按大小分塊時,指定的塊大小,單位是 MB
-c, --compress 壓縮輸出檔案
-e, --build-empty-files 如果表資料是空,還是產生一個空檔案(預設無資料則只有表結構檔案)
-x, --regex 是同Regex匹配 ‘db.table‘
-i, --ignore-engines 忽略的儲存引擎,用逗號分割
-m, --no-schemas 不備份表結構
-k, --no-locks 不使用臨時共用唯讀鎖,使用這個選項會造成資料不一致
--less-locking 減少對InnoDB表的鎖施加時間(這種模式的機制下文詳解)
-l, --long-query-guard 設定阻塞備份的長查詢逾時時間,單位是秒,預設是60秒(逾時後預設mydumper將會退出)
--kill-long-queries 殺掉長查詢 (不退出)
-b, --binlogs 匯出binlog
-D, --daemon 啟用守護進程模式,守護進程模式以某個間隔不間斷對資料庫進行備份
-I, --snapshot-interval dump快照間隔時間,預設60s,需要在daemon模式下
-L, --logfile 使用的記錄檔名(mydumper所產生的日誌), 預設使用標準輸出
--tz-utc 跨時區是使用的選項,不解釋了
--skip-tz-utc 同上
--use-savepoints 使用savepoints來減少採集metadata所造成的鎖時間,需要 SUPER 許可權
--success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn‘t exist
-h, --host 串連的主機名稱
-u, --user 備份所使用的使用者
-p, --password 密碼
-P, --port 連接埠
-S, --socket 使用socket通訊時的socket檔案
-t, --threads 開啟的備份線程數,預設是4
-C, --compress-protocol 壓縮與mysql通訊的資料
-V, --version 顯示版本號碼
-v, --verbose 輸出提示模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 預設為 2
#################################################################
myloader參數詳解
-d, --directory 備份檔案的目錄
-q, --queries-per-transaction 每次事物執行的查詢數量,預設是1000
-o, --overwrite-tables 如果要恢複的表存在,則先drop掉該表,使用該參數,需要備份時候要備份表結構
-B, --database 需要還原的資料庫
-e, --enable-binlog 啟用還原資料的二進位日誌
-h, --host 主機
-u, --user 還原的使用者
-p, --password 密碼
-P, --port 連接埠
-S, --socket socket檔案
-t, --threads 還原所使用的線程數,預設是4
-C, --compress-protocol 壓縮協議
-V, --version 顯示版本
-v, --verbose 輸出模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 預設為2
使用案例
匯出test1庫下面的table1和table2表結構和資料
mydumper -h 10.1.1.1 -uroot -proot -B test1 -T table1,table2 -t 8 -r 100000 -c --less-locking -v 3 -D -L /var/log/mydumper.log -o /tmp/test_table1_table2/
若只匯出資料增加-m參數
將匯出的資料匯入到10.1.1.2伺服器的test2庫中
myloader -h 10.1.1.2 -uroot -proot -B test2 -e -t 8 -d /tmp/test_table1_table2/ --overwrite-tables -v 3
注釋:後台記錄匯出匯入的時間
輸入screen命令
然後(time myloader -h 10.1.1.2 -u user -p ‘ap‘ -B mnew_gz -e -t 8 -d /tmp/m_members/ --overwrite-tables -v 3) 2>/tmp/im.log
最後Ctrl+A+D
MySQL多線程邏輯備份工具之mydumper