Xtrabackup完全備份、增量備份、差異備份

前言

環境:cetos7
數據庫:Mysql7.4
Xtrabackup版本: 2.4.10

Xtrabackup簡介
xtrabackup是Percona公司CTO Vadim參與開發的一款基於InnoDB的在線熱備工具,具有開源,免費,支持在線熱備,備份恢復速度快,佔用磁盤空間小等特點,並且支持不同情況下的多種備份形式。

xtrabackup包含兩個主要的工具,即xtrabackup和innobackupex,二者區別如下:

(1)xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;

(2)innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖。還有就是myisam不支持增量備份。

安裝Xtrabackup

#創建備份目錄,下載完整的包
備註:2.3.3之後不備份死鎖,如果數據庫是mysql 5.7之後的
必須要裝2.4.4纔可以用,可以向下兼容。
步驟一.   mkdir -p /xtrabackup/full/                                          
         cd /xtrabackup/
         wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.10/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.10-1.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
步驟三. #安裝
        rpm -ivh percona-xtrabackup-24-2.4.10-1.el7.x86_64.rpm
步驟四. #查看安裝好的版本
       xtrabackup -version
       可以看到:xtrabackup version 2.4.10 based on MySQL server 5.7.19 Linux (x86_64) (revision id: 3198bce)

全量備份

1.備份

#創建備份目錄
mkdir -p /xtrabackup/full/
給予Mysql的目錄權限
chown mysql.mysql  /xtrabackup/full  -R
 #進行備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' /xtrabackup/full
#進入備份目錄進行查看
假設備份出的全量備份包爲 2020-1-0    #最好對包進行壓縮,後期恢復時會對備份包進行一個破壞
[root@localhost full]# ll
總用量 0
drwxr-x--- 6 mysql mysql 238 1224 17:20 2020-1-0

2. 恢復

1.關閉數據庫,進行模擬破壞:
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*		//刪除所有數據
[root@mysql-server ~]# rm -rf /var/log/mysqld.log
[root@mysql-server ~]# rm -rf /var/log/mysql-slow/slow.log
2.回滾事務:
[root@mysql-server ~]# innobackupex --apply-log /xtrabackup/full/2020-1-0
  
備註:爲什麼會有回滾這一項呢,博主個人理解是,備份出數據時,類似在備份包外加了一個'鎖',
而回滾則是'去鎖'的過程,'去鎖'後才能把數據恢復到庫目錄。這也正是爲什麼在導出包時要做個壓縮備
份,應爲'去鎖'後備份包就不完整了,打包後更安全,假如恢復失敗,還可以恢復備份包。

3.恢復
innobackupex --copy-back /xtrabackup/full/2020-1-0

2.增量備份

1.備份

首先全量備份一次
innobackupex --user=數據庫賬號 --password='數據庫密碼' /xtrabackup/
假設全量生成的備份包爲2020-1-0

第一次增量備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-0/ #(基於全量的包)
假設第一次增量生成的包爲 2020-1-1 

第二次增量備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-1/ #(基於第一次增量包)
假設第二次增量生成的包爲 2020-1-2

第三次增量備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-2/ #(基於第二次增量包)
假設第三次增量生成的包爲 2020-1-3

....................以此類推..........

2. 恢復

首先回滾備份包
1. 先回滾全量的包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0
2. 回滾第一次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0    --incremental-dir=/xtrabackup/2020-1-1
3. 回滾第二次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0    --incremental-dir=/xtrabackup/2020-1-2
4. 回滾第三次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0    --incremental-dir=/xtrabackup/2020-1-3

備註:此時回滾的所有增量數據都到了第一次備份的全量包裏  這時數據還沒有到達庫指定目錄
接下來我們進行恢復。
恢復回滾好的 第一次全量包

5. innobackupex --copy-back /xtrabackup/2020-1-0


3.差異備份

1.備份

首先進行一次完全備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' /xtrabackup
假設完全備份的包是2020-1-0

進行第一次差異備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-0
假設第一次差異備份包是2020-1-1

進行第二次差異備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1  #還是基於第一次的全備
假設第二次差異備份的包是2020-1-2

進行第三次差異備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1  #還是基於第一次的全備
假設第三次差異備份的包是2020-1-3

進行第四次差異備份
innobackupex --user=數據庫賬號 --password='數據庫密碼' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1  #還是基於第一次的全備
假設第四次差異備份的包是2020-1-4

.................以此類推......................

2.恢復

假設恢復到第三次差異備份的數據
我們回滾時候只需要回 '滾完全備份包''第三次差異包' 備份即可。
1. 回滾
回滾全量備份包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0
回滾第三次差異備份包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0--incremental-dir=/xtrabacku/2020-1-3

2.進行恢復
恢復回滾好的 第一次全量包
innobackupex --copy-back /xtrabackup/2020-1-0

======================================================================================================================================================================================================================================================================================================
辛苦瀏覽觀看,如果對你有幫助,請順手點個贊吧 (σ゚∀゚)σ…:*☆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章