备份恢复是数据库损坏后常用的恢复手段。定期对数据库进行备份,当数据库遇到故障导致数据损坏时,可以使用合适的备份集恢复数据库,减少损失。
数据库备份分为物理备份和逻辑备份,物理备份(本文所提及的备份均为物理备份)直接将数据库物理文件拷贝为副本,逻辑备份将数据库对象按逻辑格式(例如SQL)导出到文件。
备份集是指对数据库执行备份操作后生成的若干文件集合。当备份介质为磁盘时,以文件夹的形式存在,用户可以自定义指定备份集名称和路径。一个备份集一定包含backup_profile文件(记录备份集元信息)、backup_filelist文件(备份集文件名列表)以及目标文件的备份文件(例如控制文件、数据文件、redo文件、slice文件等)。
目标文件生成备份文件的过程中,可能会进行切片、压缩、加密等操作,因此备份文件的大小以及个数与目标文件不一定相等。
备份集包含文件内容有如下所示:
全库备份指整个数据库所有数据文件的拷贝(包括控制文件、数据文件、归档文件等)。
使用全库备份指令会将所有数据库文件拷贝至指定位置,生成独立的全库备份集,该备份集为全库备份。
使用全库备份集可将数据库恢复出与原始数据库数据完全一致的全新数据库。

在备份时,主线程会将数据文件切片,分配给不同的子线程,由子线程将文件分片拷贝为备份文件。
分布式数据库的全库备份需要备份MN的主库、所有CN和所有DN组的主库。备份分为两个阶段,第一阶段,所有目标节点备份控制文件和数据文件。第二阶段,在所有目标节点上获取一致性的redo日志点,然后备份一致性redo日志点之前的归档日志文件。在恢复分布式备份集时,所有节点只回放redo到备份时记录的一致性点,可以保证恢复后分布式事务的一致性。
归档备份是针对目标数据库当前已存在的归档文件执行的备份操作,由用户指定归档日志文件的备份范围(可指定SEQUENCE、SCN、TIME或ALL范围模式),将指定范围内的归档文件拷贝至目标位置,以集合的形式存在。
在一个归档备份集里,包含的归档日志在每个实例上是连续的,不会存在空洞。
归档备份集可以用于基于时间点的恢复。
全量备份是指将备份目标的文件完全拷贝,全量备份生成的备份集包含完整的数据文件,可以单独用于恢复。
在全量备份时指定全库备份,则是将所有的数据库文件完全拷贝生成全库备份集。
增量备份指只备份某一次备份后发生过修改的数据页面。增量备份可以减少备份集占用的空间,但增量备份集不能单独用于恢复,需要先恢复其依赖的基线备份集,基线备份集是指增量备份时作为基线的某个历史增量备份集。
增量备份集分为如下两个级别:
增量备份根据基线备份集选择方式,分为差异增量备份和累积增量备份。


本地备份是指备份集存储在执行实例服务器本地磁盘,或执行实例可访问的共享存储上。
流式备份(又称远程备份)是指通过网络将备份数据发送到远程服务器,在远程服务器上保存备份集。
流式备份需要使用yasrman工具,备份集会保存在yasrman工具所在的服务器。同时,yasrman支持基于XBSA协议的流式备份。
将全库备份集中的备份文件,解压、解密恢复到数据库目录,然后回放备份集中的归档日志将数据库恢复到一致性状态,可将数据库完整恢复到备份时刻。
对于全量备份集,直接从该备份集中恢复所有文件,包括控制文件、数据文件、归档日志。
对于增量备份集,首先恢复LEVEL 0的备份集中的数据文件,然后依次用后续的LEVEL 1备份集中的页面覆盖数据库的页面,最后用当前增量备份集的归档日志,回放数据库到一致性状态。
将归档备份集里的文件恢复到数据库的归档目录并注册到数据库中,其前提是数据库已从全库备份集恢复,再使用归档恢复补充全库备份集中不包含的归档日志,使数据库恢复更多的数据。
备份集只能将数据库恢复到备份时间点,如果备份时间点之后的归档日志文件存在(或归档日志已经备份),则可以通过回放这些归档文件,让数据库恢复到任意时间点,此方式称为基于时间点的恢复(Point-in-Time Recovery)。
基于时间点的恢复允许数据库恢复到备份时间点至最新时间点间的任意时间,可以用来回退误操作或修复损坏的数据库。

如图所示,在t1时间点执行数据库的全库或增量备份,假设在数据库运行至t3时间点后发生数据库损坏,此时可以使用t1时间点的备份集和t1至t2时间点之间的归档文件,使用PITR操作回放归档日志至t2时间点,实现修复数据库异常损坏的目的。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。