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