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

2022-09-02 12:00:20

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

下載工具

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

# 從官網下載二進位制包:
wget https://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

#解壓二進位制包:
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 即可看到恢復的資料