Xtrabackup full backup, incremental backup, differential backup

Preface

Environment : cetos7
database : Mysql7.4
Xtrabackup version : 2.4.10

Introduction to Xtrabackup :
xtrabackup is an InnoDB-based online hot backup tool developed by Percona's CTO Vadim. It is open source, free, supports online hot backup, fast backup and recovery speed, small disk space, etc., and supports different situations Multiple backup forms.

xtrabackup contains two main tools, namely xtrabackup and innobackupex. The differences between the two are as follows:

(1) xtrabackup can only back up the tables of innodb and xtradb engines, but not the tables of myisam engine;

(2) innobackupex is a Perl script that encapsulates xtrabackup. It supports simultaneous backup of innodb and myisam, but a global read lock is required when backing up myisam. Also, myisam does not support incremental backup.

Install 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)

Full backup

1. Backup

#创建备份目录
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. Recovery

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. Incremental backup

1. Backup

首先全量备份一次
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. Recovery

首先回滚备份包
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. Differential backup

1. Backup

首先进行一次完全备份
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. Recovery

假设恢复到第三次差异备份的数据
我们回滚时候只需要回 '滚完全备份包''第三次差异包' 备份即可。
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

================================================= ================================================= ================================================= ================================================= ================================================= =============================================
Hard browsing and watching, if right You are helpful, please like it (σ゚∀゚)σ…:*☆

Guess you like

Origin blog.csdn.net/qq_26129413/article/details/111640993
Recommended