Xtrabackup彻底备份、增量备份、差别备份

前言

环境:cetos7
数据库:Mysql7.4
Xtrabackup版本: 2.4.10python

Xtrabackup简介
xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具备开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特色,而且支持不一样状况下的多种备份形式。mysql

xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,两者区别以下:web

(1)xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表;sql

(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. 恢复app

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.备份svg

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

首先进行一次彻底备份
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

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