MySQL 邏輯備份工具

簡介:mysql

Mydumper、Myloader 是一個第三方的、開源的 MySQL 邏輯備份工具。

支持多線程,比起 mysqldump 要快不少,也能解決 innobackupex 備份工具對 MyISAM 引擎備份的不便。

多線程快速邏輯備份,恢復速度不咋地,支持快照功能。

呃,雖然這樣好、那樣好,但若是單庫、又很大的時候,備份仍是選擇 innobackupex 物理備份吧,速度就是快。c++

下載地址:https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz正則表達式

1、安裝 Mydumpersql

shell > yum -y install gcc gcc-c++ glib2-devel pcre-devel zlib-devel mysql-devel

shell > cd /usr/local/src; wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz
shell > tar zxf mydumper-0.9.1.tar.gz
shell > cd mydumper-0.9.1
shell > cmake . && make && make install

shell > /usr/local/bin/mydumper --help
/usr/local/bin/mydumper: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

shell > find / -name "libmysqlclient.so.18"
/usr/local/src/mysql-5.5.52/libmysql/libmysqlclient.so.18
/usr/local/mysql-5.5.52/lib/libmysqlclient.so.18

shell > ln -s /usr/local/mysql-5.5.52/lib/libmysqlclient.so.18 /usr/lib64/

2、Mydumper 全備shell

shell > /usr/local/bin/mydumper --help

-B, --database           指定備份的數據庫,不指定時爲備份全庫(除 information_schema、performance_schema)
-T, --tables-list        指定備份的表,逗號分隔
-o, --outputdir          指定備份目錄
-c, --compress           壓縮備份輸出
-e, --build-empty-files  即便表中無數據也備份成一個文件
-x, --regex              支持正則表達式 db.table,如 --regex '^(?!(mysql|test))' 不備份 mysql、test 庫
-m, --no-schemas         不備份表結構
-d, --no-data            不備份數據
-G, --triggers           備份 triggers
-E, --events             備份 events
-R, --routines           備份存儲過程跟函數
-k, --no-locks           不適用共享讀鎖,會致使數據不一致
-D, --daemon             以守護進程的方式啓動
-I, --snapshot-interval  快照間隔時間,默認 60-h, --host
-u, --user
-p, --password
-P, --PORT
-S, --socket
-t, --threads            啓動幾個線程,默認 4
-C, --compress-protocol  MySQL 鏈接上使用壓縮協議,建議遠程備份時使用
...                      還有一些不經常使用的指令 經過 --help 獲取
shell > /usr/local/bin/mydumper -u xxxx -p xxxx -e -c -B db_xxx -o /data/backup_db/2017-07/db_xxx_05  # 目錄 db_xxx_05 會自動建立

shell > ls -1 /data/backup_db/2017-07/db_xxx_05
db_xxx-schema-create.sql.gz
db_xxx.table_1.sql.gz
db_xxx.table_1-schema.sql.gz
...
metadata

# 備份目錄下會生成如上幾種類型的文件,可使用 gunzip 解壓後讀取、分析
# db_xxx-schema-create.sql.gz  備份的數據庫建立語句,也就是說恢復時不須要事先建立數據庫
# db_xxx.table_1.sql.gz        數據表數據文件
# db_xxx.table_1-schema.sql.gz 數據表結構文件

shell > cat /data/backup_db/2017-07/db_xxx_05/metadata 
Started dump at: 2017-07-05 14:57:56
SHOW MASTER STATUS:
    Log: mysql-bin.000024
    Pos: 760137384
    GTID:(null)

Finished dump at: 2017-07-05 15:01:20

# metadata 記錄了備份時刻的 MASTER 信息(若是備份的是從庫,還會記錄 SLAVE STATUS),備份開始時間、結束時間

3、Myloader 全備恢復數據庫

shell > /usr/local/bin/myloader --help

-d, --directory           指定備份數據存放目錄
-o, --overwarite-tables   如表存在,則覆蓋寫入
-B, --database            指定恢復的數據庫
-s, --source-db
-e, --enable-binlog 
-h, --host
-u, --user
-p, --password
-P, --PORT
-S, --socket
-t, --threads
-C, --compress-protocol
...
shell > /usr/local/bin/myloader -u xxxx -p xxxx -B db_xxx -d /data/backup_db/2017-07/db_xxx_05

# 這是恢復單庫到一個新的 MySQL(不須要提早建立數據庫),不指定 -B 時,恢復備份中的全部數據
# 恢復單表時,解壓後直接 source .sql 便可
# 恢復到原庫時,須要添加 -o 參數,覆蓋寫入
# 機器性能容許的狀況下,添加 -t 參數,開啓多個並行線程恢復

4、如何加快恢復速度 ?多線程

shell > mysql -u xxxx -p xxxx

mysql > show processlist;

| 26 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_tj_sinideo` VALUES
       |
| 27 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_alum_kwords` VALUES

| 28 | root | localhost | baofeng_tv | Query   |    1 | update | INSERT INTO `std_epode_qyi` VALUES

| 29 | root | localhost | baofeng_tv | Query   |    2 | update | INSERT INTO `std_alum_stams` VALUES

# 默認狀況下,能夠看到有 4 個線程在插入數據,一個線程負責一張表,執行完換下一張 ( myloader -u -p -B -d )
# 19G 的數據庫恢復了 82分22秒,簡直不能忍socket

shell > /usr/local/bin/mydumper -u root -c -e -B baofeng_tv -F 500 -o /data/backup_db/baofeng_tv_06 -t 8
shell > /usr/local/bin/myloader -u root -B baofeng_tv -o -d /data/backup_db/baofeng_tv_06 -t 8

# -F 按大小拆分備份,恢復的時候也並沒什麼效果,備份速度挺快,恢復不咋地ide

# 那個,快照咋搞 ?函數

相關文章
相關標籤/搜索