xtrabackup增量備份MySQL-5.7操作說明

xtrabackup增量備份MySQL-5.7操作說明

下載工具

本方法利用xtrabackup二進位包,版本是2.4.26

# 從官網下載二進位包:
wget //downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/tarball/percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12.tar.gz

# 或者從內網下載二進位包:
wget //192.168.0.59:7100/attach/databases/percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12.tar.gz

#解壓二進位包:
tar -zxvf percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12.tar.gz 

#移動目錄:
mv percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12 /usr/local/xtrabackup

#配置PATH:
vim /etc/profile

#寫下如下內容
export PATH=$PATH:/usr/local/xtrabackup/bin

#使其生效
source /etc/profile

#軟鏈接
ln -s /usr/local/xtrabackup/bin/innobackupex /usr/bin/innobackupex

確定文件

使用備份工具xtrabackup,首先該工具要和mysql在同一個伺服器上,並且要知道如下內容才可使用備份功能

# 1.配置文件路徑:my.cnf 或者 mysqld.cnf
# 7.mysql數據文件夾路徑:data
# 2.連接地址:如果是裝在宿主機則填 127.0.0.1, 如果是裝在容器則填容器網關
# 3.埠:3306 或其它
# 4.超級帳號的賬戶:root 或其它
# 5.超級帳號的密碼:123456 或其它
# 6.socket文件:mysql.sock 或者 mysqld.sock

開始備份

因為增量備份是基於全量備份上進行的差額備份,所以先要有一次全量備份

1.全量備份

# 參數說明, innobackupex是xtrabackup的符號鏈接
innobackupex --defaults-file=[mysql配置文件路徑] \
--datadir=[mysql數據文件夾路徑] \
--host=[mysql連接地址] \
--port=[mysql埠] \
--user=[mysql備份帳號名稱] \
--password=[mysql備份帳號密碼] \
--socket=[用於連接mysql的socket文件] \
[指定備份存放路徑]

# 操作例子如下, 指定全量備份路徑在 /backup/full
innobackupex --defaults-file=/home/database/mysql-5.7/conf \
--datadir='/home/database/mysql-5.7/data' \
--host='127.0.0.1' \
--port=3306 \
--user=root \
--password='abc1234' \
--socket='/home/database/mysql-5.7/data/mysql.sock' \
/backup/full

# 備份好會出現 completed OK! 的字樣, 按照例子出現的全量備份文件夾路徑如下
/backup/full/2022-08-30_14-20-55

2.增量備份

第一次增量備份是基於第一次全量備份上操作的

# 參數說明
innobackupex --defaults-file=[mysql配置文件路徑] \
--datadir=[mysql數據文件夾路徑] \
--host=[mysql連接地址] \
--port=[mysql埠] \
--user=[mysql備份帳號名稱] \
--password=[mysql備份帳號密碼] \
--socket=[用於連接mysql的socket文件] \
--incremental-basedir=[指定前一次備份的目錄] \
--incremental=[指定增量備份存放的文件路徑]

# 操作例子如下
innobackupex --defaults-file=/home/database/mysql-5.7/conf \
--datadir='/home/database/mysql-5.7/data' \
--host='127.0.0.1' \
--port=3306 \
--user=root \
--password='abc1234' \
--socket='/home/database/mysql-5.7/data/mysql.sock' \
--incremental-basedir=/backup/full/2022-08-30_14-20-55 \
--incremental /backup/inc 

# 備份好會出現 completed OK! 的字樣, 按照例子出現的第一次增量備份文件夾路徑如下
/backup/inc/2022-08-30_14-29-07

第二次增量備份是基於前一次增量備份上操作的

# 操作例子如下
innobackupex --defaults-file=/home/database/mysql-5.7/conf \
--datadir='/home/database/mysql-5.7/data' \
--host='127.0.0.1' \
--port=3306 \
--user=root \
--password='abc1234' \
--socket='/home/database/mysql-5.7/data/mysql.sock' \
--incremental-basedir=/backup/inc/2022-08-30_14-29-07 \
--incremental /backup/inc

# 備份好會出現 completed OK! 的字樣, 按照例子出現的第二次增量備份文件夾路徑如下
/backup/inc/2022-08-30_14-34-11

備份文件路徑

上述三個操作的文件路徑如下:

全量備份:/backup/full/2022-08-30_14-20-55
增量備份1:/backup/inc/2022-08-30_14-29-07
增量備份2:/backup/inc/2022-08-30_14-34-11

開始還原

1.停止資料庫
# 不允許mysql進程存在
/etc/init.d/mysqld stop
ps aux |grep "mysqld"
kill -9 xxxx


2.移除mysql原有數據
# 創建一個新文件夾,移走原有data數據
mkdir -p /home/database/mysql-5.7/data_bak
mv /home/database/mysql-5.7/data/* /home/database/mysql-5.7/data_bak/


3.合併增量備份
# 先初始化全量
innobackupex --apply-log --redo-only [全量備份目錄]
# 例子如下
innobackupex --apply-log --redo-only /backup/full/2022-08-30_14-20-55



# 初始化第一次增量
innobackupex --apply-log --redo-only [全量備份目錄] --incremental-dir=[第一次增量備份目錄]
# 例子如下
innobackupex --apply-log --redo-only /backup/full/2022-08-30_14-20-55 --incremental-dir=/backup/inc/2022-08-30_14-29-07/


# 初始化第二次增量, 因為這是最後一次增量, 所以不需要 --redo-only 參數
innobackupex --apply-log [全量備份目錄] --incremental-dir=[第二次增量備份目錄]
# 例子如下
innobackupex --apply-log /backup/full/2022-08-30_14-20-55 --incremental-dir=/backup/inc/2022-08-30_14-34-11


# 再初始化一次全量, 不需要 --redo-only 參數
innobackupex --apply-log [全量備份目錄]
# 例子如下
innobackupex --apply-log /backup/full/2022-08-30_14-20-55


# 執行還原, 複製所有的備份到他們原來的位置
innobackupex --datadir=[mysql數據文件夾路徑] --copy-back [執行還原需要的全量備份目錄]
# 例子如下
innobackupex --datadir='/home/database/mysql-5.7/data' --copy-back /backup/full/2022-08-30_14-20-55


# 還原好會出現 completed OK! 的字樣,此時重啟 mysql 即可看到恢復的數據