MySQL之Xtrabackup的使用


一、Xtrabackup介紹

XtraBackup(PXB) 工具是 Percona 公司用 perl 語言開發的一個用於 MySQL 數據庫物理熱備的備份工具,支持 MySQl(Oracle)Percona ServerMariaDB,並且全部開源。

1.1 Xtrabackup 優點

1)備份速度快,物理備份可靠
2)備份過程不會打斷正在執行的事務(無需鎖表)
3)能夠基於壓縮等功能節約磁盤空間和流量
4)自動備份校驗
5)還原速度快
6)可以流傳將備份傳輸到另外一台機器上
7)在不增加服務器負載的情況備份數據

1.2 Xtrabackup備份原理

備份開始時首先會開啟一個后台檢測進程,實時檢測mysq redo的變化,一旦發現有新的日志寫入,立刻將日志記入后台日志文件xtrabackup_log中,之后復制innodb的數據文件一系統表空間文件ibdatax,復制結束后,將執行flush tables with readlock,然后復制.frm MYI MYD等文件,最后執行unlock tables,最終停止xtrabackup_log。

1.3 增量備份介紹:

1)、首先完成一個完全備份,並記錄下此時檢查點LSN;

2)、然后增量備份時,比較表空間中每個頁的LSN是否大於上次備份的LSN,若是則備份該頁並記錄當前檢查點的LSN。

增量備份優點:

1)、數據庫太大沒有足夠的空間全量備份,增量備份能有效節省空間,並且效率高;

2)、支持熱備份,備份過程不鎖表(針對InnoDB而言),不阻塞數據庫的讀寫;

3)、每日備份只產生少量數據,也可采用遠程備份,節省本地空間;

4)、備份恢復基於文件操作,降低直接對數據庫操作風險;

5)、備份效率更高,恢復效率更高。

二、 Xtrabackup 安裝

yum 源中的 XtraBackup 版本較低不能備份高版本的 MySQL 數據庫,所以不建議使用 yum 的方式安裝 XtraBackup

根據自己的 MySQL 版本前往官網 下載對應的安裝包,我的MySQL 版本是5.7的這里我用的是2.4.9的版本。

2.1 下載 rpm 文件

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

2.2 安裝

[root@VM_0_15_centos tmp]# rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm 
warning: percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
	libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64
	perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64
	perl(Digest::MD5) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64

發現需要先安裝依賴:

wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/libev-4.15-7.el7.x86_64.rpm
rpm -ivh libev-4.15-7.el7.x86_64.rpm 
yum install perl-DBI
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
yum -y install perl-Digest-MD5

重新安裝 Xtrabackup :

rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm 

查看安裝版本:

[root@VM_0_15_centos tmp]# xtrabackup -version
xtrabackup version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)

查看安裝的路徑:

[root@VM_0_15_centos tmp]# rpm -ql percona-xtrabackup-24 
/usr/bin/innobackupex								#xtrabackup 的軟連接
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt									#加密解密用
/usr/bin/xbstream									#類似於tar,是 Percona 自己實現的一種支持並發寫的流文件格式
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.9
/usr/share/doc/percona-xtrabackup-24-2.4.9/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

三、Xtrabackup 命令說明

詳細的 命令說明可以查看官網 ,這里只列舉常用的命令參數。

選項說明:

選項類別 縮寫命令 命令全名 含義
通用選項 -u --user=name 數據庫賬號名
通用選項 -p --password 數據庫密碼
通用選項 -H --host=name 數據庫主機IP地址
通用選項 -P --port=name 數據庫主機端口號
通用選項 -S --socket=name
備份選項 --backup 創建備份並且放入--target-dir目錄中
備份選項 --target-dir 定backup的目的地,如果目錄不存在,xtrabakcup會創建。如果目錄存在且為空則成功。不會覆蓋已存在的文件。
增量選項 --incremental-basedir
壓縮/解壓選項 --compress 壓縮
壓縮/解壓選項 --compress-threads=n 啟用n個線程進行壓縮
壓縮/解壓選項 --decompress 准備數據之前先解壓
加密/解密選項 --encrypt=AES128 AES192
加密/解密選項 --encrypt-key=ENCRYPTION_KEY 使用適當長度的加密密鑰。不建議在通過命令行訪問機器的情況下使用此選項,因此可以將該密鑰視為過程信息的一部分
加密/解密選項 --encrypt-key-file=KEYFILE 可從中讀取適當長度的原始密鑰的文件的名稱。該文件必須是一個簡單的二進制(或文本)文件,其中包含准確使用的密鑰
加密/解密選項 --encrypt-threads 可以指定多個線程並行地進行加密
加密/解密選項 --encrypt-chunk-size 可用於指定每個加密線程的工作加密緩沖區的大小(以字節為單位)(默認值為64K)
加密/解密選項 --decrypt 解密
准備選項 --prepare 實現通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
准備選項 --apply-log-only prepare備份的時候只執行redo階段,用於增量備份(最后一次增量備份的准備不需要此選項)
還原選項 --copy-back 做數據恢復時將備份數據文件拷貝到MySQL服務器的datadir。
還原選項 --move-back 這個選項與--copy-back相似,唯一的區別是它不拷貝文件,而是移動文件到目的地。這個選項移除backup文件,用時候必須小心。

參數說明:

--apply-log-only:prepare備份的時候只執行redo階段,用於增量備份。
--backup:創建備份並且放入--target-dir目錄中
--close-files:不保持文件打開狀態,xtrabackup打開表空間的時候通常不會關閉文件句柄,目的是為了正確處理DDL操作。如果表空間數量非常巨大並且不適合任何限制,一旦文件不在被訪問的時候這個選項可以關閉文件句柄.打開這個選項會產生不一致的備份。
--compact:創建一份沒有輔助索引的緊湊備份
--compress:壓縮所有輸出數據,包括事務日志文件和元數據文件,通過指定的壓縮算法,目前唯一支持的算法是quicklz.結果文件是qpress歸檔格式,每個xtrabackup創建的*.qp文件都可以通過qpress程序提取或者解壓縮
--compress-chunk-size=#:壓縮線程工作buffer的字節大小,默認是64K
--compress-threads=#:xtrabackup進行並行數據壓縮時的worker線程的數量,該選項默認值是1,並行壓縮('compress-threads')可以和並行文件拷貝('parallel')一起使用。例如:'--parallel=4 --compress --compress-threads=2'會創建4個IO線程讀取數據並通過管道傳送給2個壓縮線程。
--create-ib-logfile:這個選項目前還沒有實現,目前創建Innodb事務日志,你還是需要prepare兩次。
--datadir=DIRECTORY:backup的源目錄,mysql實例的數據目錄。從my.cnf中讀取,或者命令行指定。
--defaults-extra-file=[MY.CNF]:在global files文件之后讀取,必須在命令行的第一選項位置指定。
--defaults-file=[MY.CNF]:唯一從給定文件讀取默認選項,必須是個真實文件,必須在命令行第一個選項位置指定。
--defaults-group=GROUP-NAME:從配置文件讀取的組,innobakcupex多個實例部署時使用。
--export:為導出的表創建必要的文件
--extra-lsndir=DIRECTORY:(for --bakcup):在指定目錄創建一份xtrabakcup_checkpoints文件的額外的備份。
--incremental-basedir=DIRECTORY:創建一份增量備份時,這個目錄是增量別分的一份包含了full bakcup的Base數據集。
--incremental-dir=DIRECTORY:prepare增量備份的時候,增量備份在DIRECTORY結合full backup創建出一份新的full backup。
--incremental-force-scan:創建一份增量備份時,強制掃描所有增在備份中的數據頁即使完全改變的page bitmap數據可用。
--incremetal-lsn=LSN:創建增量備份的時候指定lsn。
--innodb-log-arch-dir:指定包含歸檔日志的目錄。只能和xtrabackup --prepare選項一起使用。
--innodb-miscellaneous:從My.cnf文件讀取的一組Innodb選項。以便xtrabackup以同樣的配置啟動內置的Innodb。通常不需要顯示指定。
--log-copy-interval=#:這個選項指定了log拷貝線程check的時間間隔(默認1秒)。
--log-stream:xtrabakcup不拷貝數據文件,將事務日志內容重定向到標准輸出直到--suspend-at-end文件被刪除。這個選項自動開啟--suspend-at-end。
--no-defaults:不從任何選項文件中讀取任何默認選項,必須在命令行第一個選項。
--databases=#:指定了需要備份的數據庫和表。
--database-file=#:指定包含數據庫和表的文件格式為databasename1.tablename1為一個元素,一個元素一行。
--parallel=#:指定備份時拷貝多個數據文件並發的進程數,默認值為1。
--prepare:xtrabackup在一份通過--backup生成的備份執行還原操作,以便准備使用。
--print-default:打印程序參數列表並退出,必須放在命令行首位。
--print-param:使xtrabackup打印參數用來將數據文件拷貝到datadir並還原它們。
--rebuild_indexes:在apply事務日志之后重建innodb輔助索引,只有和--prepare一起才生效。
--rebuild_threads=#:在緊湊備份重建輔助索引的線程數,只有和--prepare和rebuild-index一起才生效。
--stats:xtrabakcup掃描指定數據文件並打印出索引統計。
--stream=name:將所有備份文件以指定格式流向標准輸出,目前支持的格式有xbstream和tar。
--suspend-at-end:使xtrabackup在--target-dir目錄中生成xtrabakcup_suspended文件。在拷貝數據文件之后xtrabackup不是退出而是繼續拷貝日志文件並且等待知道xtrabakcup_suspended文件被刪除。這項可以使xtrabackup和其他程序協同工作。
--tables=name:正則表達式匹配database.tablename。備份匹配的表。
--tables-file=name:指定文件,一個表名一行。
--target-dir=DIRECTORY:指定backup的目的地,如果目錄不存在,xtrabakcup會創建。如果目錄存在且為空則成功。不會覆蓋已存在的文件。
--throttle=#:指定每秒操作讀寫對的數量。
--tmpdir=name:當使用--print-param指定的時候打印出正確的tmpdir參數。
--to-archived-lsn=LSN:指定prepare備份時apply事務日志的LSN,只能和xtarbackup --prepare選項一起用。
--user-memory = #:通過--prepare prepare備份時候分配多大內存,目的像innodb_buffer_pool_size。默認值100M如果你有足夠大的內存。1-2G是推薦值,支持各種單位(1MB,1M,1GB,1G)。
--version:打印xtrabackup版本並退出。
--xbstream:支持同時壓縮和流式化。需要客服傳統歸檔tar,cpio和其他不允許動態streaming生成的文件的限制,例如動態壓縮文件,xbstream超越其他傳統流式/歸檔格式的的優點是,並發stream多個文件並且更緊湊的數據存儲(所以可以和--parallel選項選項一起使用xbstream格式進行streaming)。

四、Xtrabackup 實戰

4.1 全量備份

1.創建備份

[root@VM_0_15_centos backup]# xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/xtrabackup/

如果目標目錄不存在,xtrabackup 會創建它。xtrabackup不會覆蓋現有文件,如果目標文件已存在它會因操作系統錯誤17而失敗。

2.准備備份

xtrabackup --prepare --target-dir=/backup/xtrabackup/

一般情況下,在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據 文件仍處理不一致狀態。--prepare參數實現通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態。

3.恢復備份

[root@VM_0_15_centos xtrabackup]# systemctl stop mysqld # 關閉 MySQL 服務
[root@VM_0_15_centos xtrabackup]# rsync -avrP /backup/xtrabackup/ /var/lib/mysql/ # 還原數據
[root@VM_0_15_centos xtrabackup]# chown -R mysql:mysql /var/lib/mysql 
[root@VM_0_15_centos xtrabackup]# systemctl start mysqld # 重啟 MySQL 服務

4.2 增量備份

**1.先創建完全備份 **

xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/xtrabackup/

2.創建第一次增量備份

xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/inc1/ --incremental-basedir=/backup/xtrabackup/

3.創建第二次增量備份

xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/inc2/ --incremental-basedir=/backup/inc1/

4.准備全量備份

xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/

5.准備第一次增量備份

xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc1

6.准備第二次增量備份

xtrabackup --prepare --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc2/

7.恢復數據

systemctl stop mysqld # 停止服務
rsync -avrP /backup/xtrabackup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql    
systemctl start mysqld # 啟動服務

現在數據已經恢復到執行第二次增量備份命令時的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM