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

======================================================================================================================================================================================================================================================================================================
辛苦浏览观看,如果对你有帮助,请顺手点个赞吧 (σ゚∀゚)σ…:*☆

猜你喜欢

转载自blog.csdn.net/qq_26129413/article/details/111640993