7 數據與建表語句分離。
二 原理(流程圖 見末尾)
mydumper的主要工作步驟
1 主線程 FLUSH TABLES WITH READ LOCK, 施加全局只讀鎖,以阻止DML語句寫入,保證數據的一致性
2 讀取當前時間點的二進制日志文件名和日志寫入的位置并記錄在metadata文件中,以供即使點恢復使用
3 START TRANSACTION WITH CONSISTENT SNAPSHOT; 開啟讀一致事務
4 啟用N個(線程數可以指定,默認是4)dump線程導出表和表結構
5 備份非事務類型的表
6 主線程 UNLOCK TABLES,備份完成非事務類型的表之后,釋放全局只讀鎖
7 dump InnoDB tables, 基于事物導出InnoDB表
8 事物結束
來源: http://blog.itpub.net/22664653/viewspace-2132759/
三 安裝使用
-
1.yum install glib2-devel mysql-devel zlib-devel pcre-devel zlib gcc-c++ gcc cmake -y
-
2.wget https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
-
3.tar xf mydumper-0.9.1.tar.gz
-
4.cd mydumper-0.9.1/
-
5.cmake .
-
6.make && make install
/usr/local/bin/mydumper
/usr/local/bin/myloader
-
一般會遇到找不到 mysql-libraries 的問題,可以參考 stackoverflow 的回答,如果再解決不了,則可能是自己制定的MySQL安裝目錄的問題,比如我自己的安裝目錄是/opt/mysql/
-
則需要做一個軟連接
-
ln -s /opt/mysql/lib/libperconaserverclient.so /usr/lib64/libperconaserverclient.so
-
3.2 參數說明
mydumper 的常用參數
-
-B, --database 要導出的dbname
-
-T, --tables-list 需要導出的表名,導出多個表需要逗號分隔,t1[,t2,t3 ....]
-
-o, --outputdir 導出數據文件存放的目錄,mydumper會自動創建
-
-s, --statement-size 生成插入語句的字節數, 默認1000000字節
-
-r, --rows Try to split tables into chunks of this many rows. This option turns off --chunk-filesize
-
-F, --chunk-filesize 切割表文件的大小,默認單位是 MB ,如果表大于
-
-c, --compress 壓縮導出的文件
-
-e, --build-empty-files 即使是空表也為表創建文件
-
-x, --regex 使用正則表達式匹配 db.table
-
-i, --ignore-engines 忽略的存儲引擎,多個值使用逗號分隔
-
-m, --no-schemas 只導出數據,不導出建庫建表語句
-
-d, --no-data 僅僅導出建表結構,創建db的語句
-
-G, --triggers 導出觸發器
-
-E, --events 導出events
-
-R, --routines 導出存儲過程和函數
-
-k, --no-locks 不執行臨時的只讀鎖,會導致備份不一致 。WARNING: This will cause inconsistent backups
-
--less-locking 最小化在innodb表上的鎖表時間 --butai
-
-l, --long-query-guard 設置長時間執行的sql 的時間標準
-
-K, --kill-long-queries 將長時間執行的sql kill
-
-D, --daemon 以守護進程的方式執行
-
-I, --snapshot-interval 創建導出快照的時間間隔,默認是 60s ,該參數只有在守護進程執行的時候有用。
-
-L, --logfile 指定mydumper輸出的日志文件,默認使用控制臺輸出。
-
--tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping of TIMESTAMP data when a server has data in different time zones or data is being moved between servers with different time zones, defaults to on use --skip-tz-utc to disable.
-
--skip-tz-utc
-
--use-savepoints 使用savepoints 減少MDL 鎖事件 需要 SUPER 權限
-
--success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn
myloader使用參數
-
-d, --directory 備份文件的文件夾
-
-q, --queries-per-transaction 每次事物執行的查詢數量,默認是1000
-
-o, --overwrite-tables 如果要恢復的表存在,則先drop掉該表,使用該參數,需要備份時候要備份表結構
-
-B, --database 需要還原的數據庫
-
-e, --enable-binlog 啟用還原數據的二進制日志
-
-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 壓縮協議
-
-V, --version 顯示版本
-
-v, --verbose 輸出模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默認為2
-
mydumper 和mysqldump 比較:
mydumper :mydumper -u root -p rootroot -S /data/mysql_3306/mysql.sock -B homework -o .
恢復命令
# myloader -u root -p rootroot -s /data/mysql_3306/mysql.sock -d /data/10.0.6.11/2017-02-22/homework -B homework
mysqldump :
/opt/mysql_3306/bin/mysqldump --socket=/data/mysql_3306/mysql.sock -uroot -prootroot -T. homework