Innobackupex (全备+增量)备份恢复

2021年9月13日11:29:49 发表评论
摘要

【心语】所谓门槛,能力够了就是门,能力不够就是槛。人生的沟沟坎坎,多半是能力不足所致。

一、简介
Mysql的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源占用。增量备份主要是以全备或增量备份为基础。备份那些变更过的页面。其备份的原理是基于一个不断增长的LSN序列,这个LSN与Oracle的SCN类似。在恢复期间,我们需要将已提交的事务前滚,未提交的事务回滚

注意事项:

  • 我们可以使用—incremental-lsn选项来实施增量备份
  • 对于非XtraDB或者lnnoDB存储引擎,热备方式依旧会全部备份所有的数据文件,索引文件,格式文件等。
  • 对于增量备的Prepare阶段,有2个需要注意,一个是提交的事务需要replayed,一个未提交的事务需要rollback
  • 如果在Prepare阶段replay了已提交的事务以及回滚了未提交的事务,则后续的增量备份无法添加到当前的全备,因此在Prepare阶段全备应使用—redo-only选项
  • 对于存在多次增量的情形,仅仅只有最后一个增量不需要使用—redo-only选项,如果使用了的话,rollback将由服务器启动的时候来完成

二、演示备份和恢复过程
1、实验环境
mysql> select version();
Innobackupex (全备+增量)备份恢复
2、全备一次
[root@boke ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --port=3306 /data/backup/
Innobackupex (全备+增量)备份恢复
#全备OK

3、查看备份产生的文件
[root@boke ~]# ll /data/backup/
Innobackupex (全备+增量)备份恢复

4、模拟数据库新增数据
mysql> create database test001;
mysql> create database test002;
mysql> create database test003;

Innobackupex (全备+增量)备份恢复

5、增量备份
创建存放增量备份目录并赋权
[root@boke ~]# mkdir /data/backup/full
[root@boke ~]# chown mysql.mysql /data/backup/full/ -R
--正式开始增量备份---
[root@boke ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental --incremental-basedir=/data/backup/2021-09-09_14-41-31/ /data/backup/full/
Innobackupex (全备+增量)备份恢复
增量备份成功
6、查看增量备份的文件
[root@boke ~]# ll /data/backup/full/
Innobackupex (全备+增量)备份恢复
---查看增备产生的相关文件---
[root@boke 2021-09-09_14-50-52]# ll
Innobackupex (全备+增量)备份恢复
==文件xtrabackup_info 含有备份类型==
[root@boke 2021-09-09_14-50-52]# more xtrabackup_info |grep ^incremental
Innobackupex (全备+增量)备份恢复
==文件xtrabackup_checkpoints包含了备份的相关检点信息==
[root@boke 2021-09-09_14-50-52]# more xtrabackup_checkpoints
Innobackupex (全备+增量)备份恢复
==文件xtrabackup_binlog_info包含了binlog的位置==
[root@boke 2021-09-09_14-50-52]# more xtrabackup_binlog_info
Innobackupex (全备+增量)备份恢复
7、误操作删除刚才那几个数据库或者清除某个表
Innobackupex (全备+增量)备份恢复

8、停止mysql数据库
[root@boke ~]# /etc/init.d/mysqld stop
[root@boke ~]# ps -ef|grep mysql
Innobackupex (全备+增量)备份恢复
9、恢复数据库(先恢复全备,在按增量备份时间先后顺序。依次恢复增量备份)
1、先恢复完整的备份集
[root@boke ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backup/2021-09-09_14-41-31/
Innobackupex (全备+增量)备份恢复
2、在恢复增量备份集:(如果有多份增量备份,最好最后一份增量不用—redo-only.其它的都用—redo-only)
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2021-09-09_14-41-31/ --incremental-dir=/data/backup/full/2021-09-09_14-50-52/
Innobackupex (全备+增量)备份恢复
说明:/data/backup/2021-09-09_14-41-31/ 为全备份目录,--incremental-dir 为增量备份目录
10、将原有文件夹重命名到新位置、并创建源文件夹
[root@boke ~]# mv /data/mysql/ /data/mysqlbak
[root@boke ~]# mkdir /data/mysql/
11、执行拷贝恢复的文件到原来的数据位置
[root@boke ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2021-09-09_14-41-31/
Innobackupex (全备+增量)备份恢复
说明:/data/backup/2021-09-09_14-41-31/为全备份目录
11、权限修改
[root@boke ~]# chown mysql.mysql /data/mysql –R
12、启动被恢复的实例
[root@boke ~]# /etc/init.d/mysqld start
Innobackupex (全备+增量)备份恢复
13、查询被删除的数据库
mysql> show databases;
Innobackupex (全备+增量)备份恢复
恢复成功!
总结:

  • 增量备份是基于增量或全备的基础之上完成的
  • 增量备份的基础是lnnoDB引擎使用了LSN机制,非lnnoDB引擎不存在增量备份的说法,每次都是全备
  • 对于增量备份的恢复期间需要对已提交的事务前滚,未提交的事务回滚
  • 增量备份的恢复应按照备份的顺序逐个逐个replay.需要使用—apply-log –redo-only选项
  • 仅仅最后一个增量备份不需要使用—redo-only选项
  • 如果要做完全恢复或时点恢复,需要结合binlog来实现
  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: