MYSQL备份恢复知识:第九章:MEB备份工具

MySQL企业版本中的官方备份工具,支持非一致性备份,支持SBT驱动。下面,我们通过MEB备份的示例来详细的介绍备份过程。如果前面章节的理论部分表达不清晰,那么下面结合操作,我相信读者能更容易理解。

1 全量备份

备份内容包括所有的数据、参数文件、缓存文件等。
命令语法:

[mysql@db01 ~]$ mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/tmp/bk --trace=1 backup

##defaults-file为配置文件路径,backup-dir为备份数据保存路径,trace参数会输出更多信息但是非必要,backup为操作类型
以下为输出信息:
1) 开启归档
在这里插入图片描述

2) 查看redo日志状态,定位当前日志文件,并进行flush操作
在这里插入图片描述

3) 拷贝系统表空间文件,在同一时间段内,还记录了redo日志的抓取过程
在这里插入图片描述

4) 拷贝UNDO文件
在这里插入图片描述

5) 打开实例锁,获取数据文件结构,关闭实例锁
在这里插入图片描述

6) 拷贝InnoDB数据文件。可以看到,在前一步关闭了实例锁,拷贝的过程是在没有锁的状态下进行的。另外,存储在外部路径(非 DATADIR)的数据文件,添加”meb#x_”的前缀。
在这里插入图片描述

7) 将内存buffer pool数据写到ib_buffer_pool文件中,并进行拷贝
在这里插入图片描述

8) 查看binary日志状态,并拷贝全部非当前日志文件。当前正在写入的文件编号为27,因此拷贝26号之前的全部文件。
在这里插入图片描述

9) 打开实例锁,再次扫描数据文件。由于拷贝数据文件时没有开启实例锁,因此检测到拷贝其实发生了DDL操作,因此要重新拷贝发生过DDL操作的数据文件。同步要对redo日志进行写盘操作
在这里插入图片描述

10) 发现数据库中存在非innodb表(db03库的mytb01),需要启用表级锁。开启锁后,备份表和对应的其它数据文件。再对系统库文件,如performance_schema、mysql、sys等进行拷贝。如果不存在非innodb的数据文件,将会在没有开启表级锁的情况下拷贝系统库文件。
在这里插入图片描述

11) 收集数据库一致性相关信息
在这里插入图片描述
12) 更新binary日志信息,拷贝当前编号(27)的日志文件。实例锁关闭。
在这里插入图片描述

13) 备份数据库参数
在这里插入图片描述

14) 将备份信息写入数据库表中。mysql.backup_history表中记录了备份的执行结果,包括备份类型、LSN、时间等。mysql.backup_progress表中记录了备份的执行过程。
在这里插入图片描述

Backup_history表中记录内容,例如:
在这里插入图片描述

对应的backup_id,在backup_progress表中记录的内容,例如,
在这里插入图片描述

15) 生成的备份文件(/tmp/bk路径下)
在这里插入图片描述

2 全量恢复

[mysql@db01 ~]$ mysqlbackup --defaults-file=/tmp/bk/server-my.cnf --backup-dir=/tmp/bk --trace=1 copy-back-and-apply-log

##指向备份的参数文件,备份数据存储路径,日志级别1,操作类型为拷贝数据和加载日志。以下输出信息:
1) 从备份数据中加载备份的catalog
在这里插入图片描述

2) 加载参数文件
在这里插入图片描述

3) 拷贝系统表空间和数据表空间数据文件
在这里插入图片描述

4) 拷贝binary日志文件
在这里插入图片描述

5) 拷贝非InnoDB数据文件
在这里插入图片描述

6) 恢复SERVER-ID,数据拷贝结束
在这里插入图片描述

7) 创建缓存,加载备份的redo日志
在这里插入图片描述

8) 检测所有InnoDB数据文件
在这里插入图片描述

9) 将redo日志apply相关的数据文件中。本例中,42949676279和4294967278为UNDO文件,用于日志比对来决定回滚还是提交;0和4294967294为系统表空间;其它的14、16和238与备份期间的数据变化有关,需要日志进行apply。其它数据文件,在备份期间没有变化,不需要日志apply。由于篇幅关系,加载的输出内容被忽略掉了,实际上UNDO、16。因为在测试备份过程,在执行一个与16号表空间相关的数据插入存储过程。
在这里插入图片描述

10) 数据加载完成,重建redo日志,保持备份时的LSN状态。但是在数据库恢复完成后,启动后将全部更新到最新状态。提示binary的结束位置为223426。所有的copy-back and apply动作全部完成。
在这里插入图片描述

3 增量备份

增量备份有两种,差异增量(incremental)和积累增量(differential)。差异增量备份,每次执行都是以上一次的备份数据为基础,对发生了变化的数据进行备份,不论它是全量还是增量备份。积累增量备份,每次执行都是以上一次的全量备份数据为基础,对发生了变化的数据进行备份。在执行时,使用不同的参数加以区别。

--incremental-base=history:last_full_backup  ##积累增量备份
--incremental-base=history:last_backup      ##差异增量备份
--incremental-base=dir:/tmp/xxx           ##可以指定前序备份的数据路径,以此为基础进行增量。

前序可能是全是,也可能是增量。
在增量备份时,需要先检测备份历史数据,它存储在mysql.backup_history表中。例如,
在这里插入图片描述

增量备份语法,以积累增量为例:

[mysql@db01 ~]$ mysqlbackup --defaults-file=/etc/my.cnf --incremental --incremental-base=history:last_full_backup --incremental-backup-dir=/tmp/inc --trace=1 backup

–incremental参数指明了此操作为增量备份,
–incremental-base=history:last_full_backup 参数指增量的基础为上一次全是备份,就也是积累增量的,
–incremental-backup-dir 参数为此次备份的数据保存路径
1) 在mysql.backup_history表中中查找上一次的全量备份信息,确定此次增量的开始位置。
在这里插入图片描述

增量采用”full-scan“模式,即对所有数据块进行扫描确定哪些发生了变化。这种方式效率低,可以通过Page Track插件来优化。该插件包含在MEB组件中,需要单独安装。例如,
在这里插入图片描述

在激活了Page Track后,增量备份从Page Track日志中直接获取变化的数据块列表,不需要进行扫描。命令执行的信息例如,
在这里插入图片描述

2) 启用归档
在这里插入图片描述

3) 拷贝UNDO数据
在这里插入图片描述

4) 备份过程中有数据变化,redo日志切换
在这里插入图片描述

5) 开启实例锁,获取数据结构列表,关闭锁
在这里插入图片描述

6) 拷贝binary日志
在这里插入图片描述

7) 开启实例锁,检测备份过程上产生的DDL变化
在这里插入图片描述

8) 再次拷贝发生了变化的数据文件,覆盖第一次备份的的数据
在这里插入图片描述

9) 开启表级锁,拷贝非innodb数据文件,关闭表级锁
在这里插入图片描述

10) 收集备份的一致信息
在这里插入图片描述

11) 拷贝最后一个binary日志
在这里插入图片描述

12) 删除没有变化的数据文件
在这里插入图片描述

13) 更新备份信息表
在这里插入图片描述

4 增量恢复

首先要进行全量备份数据的日志apply,使备份数据完成一致性校验,但是不要拷贝到my.cnf参数指定的路径。全量恢复完成后,切记不要尝试使用全量备份数据作为DATADIR启动数据库服务,否则无法进行增量恢复。因为启动后,会对REDO日志与BIN日志进行校验,有些交易可能会被回滚。但是这笔交易在备份结束后可能是已经完成的,如果进行了回滚,与后续的增量备份数据就会出现不一致的问题。
使用apply-log操作替代之前全量恢复时的copy-back-and-apply-log操作,即将备份数据中的日志加载到数据文件中,达到一致性。例如,

[mysql@db01 ~]$ mysqlbackup --defaults-file=/tmp/bk/server-my.cnf  --backup-dir=/tmp/bk apply-log

将增量备份数据合成到全量备份数据中。例如,

[mysql@db01 ~]$ mysqlbackup --defaults-file=/tmp/bk/server-my.cnf  --incremental-backup-dir=/tmp/inc3 --backup-dir=/tmp/bk apply-incremental-backup

–incremental-backup-dir为增量备份数据路径,
–backup-dir为全量备份数据路径,操作类型为apply-incremental-backup

1) 将增量备份的数据块合并到全量备份中
在这里插入图片描述

2) 将增量备份的binary日志合并到全是备份数据中
在这里插入图片描述

3) 拷贝全部非innodb数据
在这里插入图片描述

4) 将日志加载到更新后的全量备份数据中
在这里插入图片描述

增量与全是合并完成后,使用copy-back操作将数据还原到参数文件中指定的路径下。例如,

[mysql@db01 ~]$ mysqlbackup --defaults-file=/tmp/bk/server-my.cnf --backup-dir=/tmp/bk copy-back

5 连接备份软件

MEB软件提供SBT驱动,这与ORACLE的方式非常相似。使用SBT驱动,可以与第三方的备份软件进行连接,备份数据直接通过通道传输到软件的存储中。在MEB的官方文档中,要求使用Oracle Secure Backup进行对接,实际上与第三方软件也可以对接。但是具体情况要通过测试来验证,并不能保证所有软件都可以对接。
本文档,我们以NetBackup软件举例,介绍备份和恢复的语法。

5.1 备份

备份的语法如下:
在这里插入图片描述

backup-image:生成的备份文件,它以sbt开头,即保存到备份软件中;
sbt-lib-path:与备份软件对接的驱动文件
sbt-environment:向备份软件传递的参数,参数包括多个
NB_ORA_SERV:备份软件服务器地址
NB_ORA_CLIENT:客户端服务器,也注是MYSQL数据库地址
NB_ORA_POLICY:备份策略名称
backup-dir:备份数据临时保存路径
backup-to-image,备份数据保存为image文件
MEB的SBT,与Oracle数据库的SBT相似,但是有一点区别。Oracle RMAN,通过SBT通道,实时将备份数据传输到备份软件中。而MEB,需要将备份数据临时保存在本地路径中,也就是backup-dir指定的路径。然后再将备份数据合成为一个image文件传送到备份软件的存储中。
如果使用增量备份,添加—incremental --incremental-base参数即可,这与磁盘备份方式相同。例如:
在这里插入图片描述

5.2 恢复

恢复的语法如下:
在这里插入图片描述

使用的参数,基本上备份是相同的。同样是使用SBT驱动连接备份软件,区别是这次传递参数后是取回数据,并将image文件恢复成目录,保存在backup-dir中。最后通过copy-back-and-app-log,将备份数据拷贝回DATADIR目录中。如果是增量恢复,在前面的语法中,将copy-backup-and-apply-log修改为apply-log,即只进行日志应用,但是不拷贝回DATADIR路径下。这与磁盘备份方式的恢复是相同的。SBT增量的语法如下:
在这里插入图片描述

增量的恢复,将进行copy-back-and-apply log操作。如果恢复多个增量,在最后一个增量恢复后执行copy-back-and-apply log,其它过程都只是执行apply-log即可。

CSDN视频课程:

https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值