centos7,mysql5

全量备份

1 备份

#创建备份目录
mkdir -p /xtrabackup/full/
#给予Mysql的目录权限
chown mysql.mysql  /xtrabackup/full  -R 
#进行备份
innobackupex --user=数据库账号 --password='数据库密码' /xtrabackup/full
#进入备份目录进行查看
#假设备份出的全量备份包为 2021-1-1 
#最好对包进行压缩,后期恢复时会对备份包进行一个破坏
[root@localhost full]# ll
总用量 0
drwxr-x--- 6 mysql mysql 238 12月 24 17:20 2021-1-1

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/2021-1-1 备注:为什么会有回滚这一项呢,博主个人理解是,备份出数据时,类似在备份包外加了一个'锁',而回滚则是'去锁'的过程,'去锁'后才能把数据恢复到库目录。这也正是为什么在导出包时要做个压缩备
份,应为'去锁'后备份包就不完整了,打包后更安全,假如恢复失败,还可以恢复备份包。
3.恢复
innobackupex --copy-back /xtrabackup/full/2021-1-1

增量备份

1 备份

首先全量备份一次
innobackupex --user=数据库账号 --password='数据库密码' /xtrabackup/
假设全量生成的备份包为2021-1-1-00
第一次增量备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-1-1-00/ #(基于全量的包)假设第一次增量生成的包为 2021-1-1
第二次增量备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-1-1/ #(基于第一次增量包)假设第二次增量生成的包为 2021-1-2
第三次增量备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-1-2/ #(基于第二次增量包)假设第三次增量生成的包为 2021-1-3
....................以此类推..........

2 恢复

首先回滚备份包
1. 先回滚全量的包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00
2. 回滚第一次增量包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00 --incremental-dir=/xtrabackup/2020-1-1
3. 回滚第二次增量包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00 --incremental-dir=/xtrabackup/2020-1-2
4. 回滚第三次增量包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00 --incremental-dir=/xtrabackup/2020-1-3

备注:此时回滚的所有增量数据都到了第一次备份的全量包里  这时数据还没有到达库指定目录
接下来我们进行恢复。
恢复回滚好的 第一次全量包
5. innobackupex --copy-back /xtrabackup/2020-1-1-0

差异备份

1 备份

首先进行一次完全备份
innobackupex --user=数据库账号 --password='数据库密码' /xtrabackup
假设完全备份的包是2021-1-1-00
进行第一次差异备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-1-1-00
假设第一次差异备份包是2021-1-1
进行第二次差异备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-1-1-00  #还是基于第一次的全备
假设第二次差异备份的包是2021-1-2
进行第三次差异备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-1-1-00  #还是基于第一次的全备
假设第三次差异备份的包是2021-1-3
进行第四次差异备份
innobackupex --user=数据库账号 --password='数据库密码' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-1-1-00  #还是基于第一次的全备
假设第四次差异备份的包是2021-1-4
.................以此类推......................

2 恢复

假设恢复到第三次差异备份的数据
我们回滚时候只需要回 '滚完全备份包' 和 '第三次差异包' 备份即可。
1. 回滚
回滚全量备份包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00
回滚第三次差异备份包
innobackupex --apply-log --redo-only /xtrabackup/2021-1-1-00--incremental-dir=/xtrabacku/2021-1-3

2.进行恢复
恢复回滚好的 第一次全量包
innobackupex --copy-back /xtrabackup/2021-1-1-00