前言
環境: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 12月 24 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
======================================================================================================================================================================================================================================================================================================
辛苦瀏覽觀看,如果對你有幫助,請順手點個贊吧 (σ゚∀゚)σ…:*☆