MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復

龍山游龍發表於2021-07-15

一、說明

MyDumper是一個針對MySQL和Drizzle的高效能多執行緒備份和恢復工具。開發人員主要來自MySQL,Facebook,SkySQL公司。備份格式為邏輯備份,每張表(非空表)會預設生成兩個檔案,分別包括建表語句及資料。

1.1 MyDumper優勢

1.多執行緒備份工具

2.支援檔案壓縮功能

3.一致性:在所有的threads之間維護快照,提供master和slave日誌的準確位置等

4.支援多執行緒恢復

5.比mysqldump備份速度及恢復速度都更快

預設是關閉了binlog的dump功能,要想開啟,需要在cmke編譯的時候新增-DWITH_BINLOG=ON

1.2 MyDumper如何獲取一致性快照的

1.server上正在執行的慢查詢或中斷或者被kill掉

2.需要施加全域性寫鎖("flush tables with read lock")

3.讀取不同的後設資料("show slave status","show master status")

4.建立具有事務性和非事務性表一致的快照(0.2.2+)

3.一旦所有的工作現成通知已經建立好快照,master會執行"unlock tables",開始執行佇列中的job

二、MyDumper/ MyLoader安裝

2.1 下載地址

 2.2 安裝MyDumper依賴包

* Ubuntu or Debian:
apt-get install libglib2.0-dev libmysqlclient15-dev zlib1g-dev libpcre3-dev libssl-dev
* Fedora, RedHat and CentOS:
 yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel
* openSUSE:
zypper install glib2-devel libmysqlclient-devel pcre-devel zlib-devel
* MacOSX:
port install glib2 mysql5 pcre pkgconfig cmake

 2.3 安裝MyDumper

shell> tar -zxvf mydumper-0.9.1.tar.gz
shell> cd mydumper-0.9.1
shell> cmake .
shell> make

注:安裝完畢會生成兩個檔案mydumper和myloader

2.4 檢驗是否安裝成功

shell> mydumper -V
mydumper 0.9.1, built against MySQL 5.6.38

三、MyDumper常用引數列表

常用引數

說明

-B,  --database

要匯出的資料庫名

-T, --tables-list

要匯出的表名,多個表用逗號分隔。不支援正規表示式

-o, --outputdir

匯出資料檔案存放的目錄, mydumper 會自動建立

-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

不施加臨時的共享讀鎖,會導致備份不一致

-L, --logfile

指定 mydumper 輸出的日誌檔案,預設使用控制檯輸出

-h, --host

主機

-u, --user

使用者名稱

-p, --password

密碼

-P, --port

-S, --socket

套接字檔案

-t, --threads

所使用的執行緒數,預設是 4

-C, --compress-protocol

壓縮協議

-v, --verbose

輸出模式 , 0 = silent, 1 = errors, 2 = warnings, 3 = info, 預設為 2

四、匯出示例

注:

1.新增--compress引數,會生成.sql.gz檔案

2.加上-G -E -R引數,會生成dbname-schema-post.sql檔案

3.--outputdir目錄不要求為空,同名檔案會直接覆蓋

4.可以用 --regex '^(?!(mysql))' 來忽略某個庫

5.-B 後面不指定即所有庫(不包括performance_schema), 後面指定即匯出指定庫

4.1 全庫匯出

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock --outputdir=/backup/mydumper -G -E -R --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.2備份指定庫指定表

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock  -B db1 -T t1,t2 --outputdir=/backup/mydumper  --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.3 只匯出結構 

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock  -B db1 -d --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log

注:可用於測試升級

4.4 只匯出資料

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock  -B db1 -m --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.5 遠端壓縮及使用壓縮協議

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock  -B db1 -d --outputdir=/backup/mydumper -c -C tar --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.6 匹配多張表備份

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock  -B db1 --regex=db* --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.7 過濾多個庫

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock --regex '^(?!(mysql|db2))' --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log

4.8 即使是空表也生成.sql

mydumper --user=root --password='mysql'  --socket=/tmp/mysql.sock --regex '^(?!(mysql))' -B db1 -e --outputdir=/backup/mydumper --verbose=3 --logfile=/backup/mydumper/mydumper.log

五、MyLoader常用引數

常用引數

說明

-d,--directory

備份檔案目錄

-q,--queries-per-transaction

每次事務執行的查詢時間,預設為 1 000

-o,--overwrite-tables

如果恢復表存在,先 drop

-B,--database

需要還原的資料庫

-s,--source-db

源資料庫

-e,--enable-binlog

啟動還原資料的二進位制日誌

-h,--host

主機 /I P

-u,--user

還原時使用者

-p,--password

密碼

-P,--port

-S,--socket

套接字

-t,--threads

執行緒數,預設為 4

-C,--compress-protocol

壓縮協議

-V,--version

檢視版本

六、匯入示例

6.1 恢復指定庫

myloader --user=root --password='mysql'  --socket=/tmp/mysql.sock --directory=/backup/mydumper --verbose=3 -s db3

6.2 恢復一個庫到原來的例項

myloader --user=root --password='mysql'  --socket=/tmp/mysql.sock --directory=/backup/mydumper --verbose=3 -s db1 -B 目標庫

   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2781424/,如需轉載,請註明出處,否則將追究法律責任。

相關文章