DB2 全量在线备份与恢复¶
目前在 Trove 中,我们支持 DB2 的全量离线备份,这是 DB2 的默认备份机制。这使得用户可以在没有应用程序连接或使用这些数据库时执行 DB2 数据库的完整备份。虽然这在可以接受停机时间的情况下很有用,但在生产环境中,应用程序预计始终在线,这就不太方便了。DB2 提供了一种执行在线备份的方法,本规范概述了我们如何在 Trove 中实现全量在线备份机制。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/db2-online-backup
问题描述¶
我们可以使用 DB2 执行两种类型的备份——离线和在线。离线备份需要用户和应用程序断开与数据库的连接,从而需要一定的停机时间。另一方面,在线备份可以在用户仍然连接到数据库时执行。Trove 当前支持 DB2 的全量离线备份。在本规范中,我们解释了如何在 Trove 中启用 DB2 的全量在线备份。
提议的变更¶
如上所述,离线和在线备份之间的区别在于,在前者的情况下,所有应用程序必须断开与数据库的连接,而在后者的情况下,应用程序仍然可以连接到数据库,同时进行备份。为了启用在线备份,需要启用归档日志记录。这允许应用程序在进行备份时使用数据库。对数据库所做的任何更新都会记录在日志中。
日志记录是一种机制,它在修改数据时将数据库的每次更新记录到事务日志(也称为活动日志)中。有两种类型的日志记录机制——循环日志记录和归档日志记录。默认情况下,启用循环日志记录,这意味着在最后一个活动日志文件被填满后,第一个活动日志文件将被覆盖。使用循环日志记录作为默认日志记录机制,只能进行离线备份。
使用归档日志记录,日志按顺序存储,并且当日志文件被填满时,它们会被归档。归档日志记录允许用户通过回滚到特定时间点或故障发生之前的时间点来恢复数据库。因此,用户可以从备份映像恢复数据库,并使用日志回滚到特定时间点,从而使其达到一致状态。有关归档日志记录的介绍,请参阅 1,有关 DB2 中事务日志记录的工作方式的概述,请参阅 2。
要为 Trove 启用全量在线备份,需要执行以下步骤
创建一个目录来存储备份和归档日志 - /home/db2inst1/db2inst1/backup/ArchiveLogs
当创建数据库时,如果为 DB2 配置了在线备份(通过 backup_strategy 配置属性),则配置以下数据库配置参数:‘LOGARCHMETH1’,指向可以使用以下命令存储归档日志的位置
db2 update database configuration for <db> using LOGARCHMETH1 ‘DISK:/home/db2inst1/backup/ArchiveLogs’
设置此数据库配置参数可启用归档日志记录,并将归档日志存储在与主/活动日志不同的位置。进行此更改后,需要进行一次完整的离线备份,然后才能建立与数据库的任何连接(这是因为当进行此配置更改时,数据库会进入“BACKUP_PENDING”状态)。
db2 backup database <db> to /home/db2inst1/db2inst1/backup
在此操作后,可以从备份目录中删除此备份。
- DB2 的在线备份策略包括以下操作
检查每个数据库是否启用了归档日志记录
检查是否有足够的空间来存储备份(包括数据库和归档日志)。DB2 提供的 get_dbsize_info 函数可用于获取数据库目录的大小。我们可以查询 SYSIBMADM.LOG_UTILIZATION 表来获取每个数据库使用的日志空间。
对数据库进行在线备份,并将归档日志包含在备份映像本身中
db2 backup database <db> ONLINE to /home/db2inst1/db2inst1/backup INCLUDE LOGS
备份完成后,在卷存储中压缩/加密备份。
然后可以将压缩/加密的文件存储在 Swift 的 database_backups 容器中。
备份存储在 Swift 中后,我们可以删除备份目录中的备份文件和归档日志。
恢复数据库包括从在线备份映像恢复,并将日志回滚到备份结束处,以确保数据库处于一致状态。
创建一个目录来存储备份文件和归档日志
从存储中检索备份到正确的位置
使用以下命令恢复数据库并确保其处于一致状态:- db2 RESTORE DATABASE <db> FROM <backup_dir> LOGTARGET <log_dir>
上述命令从指定的在线备份目录恢复数据库,并将归档日志文件提取到 log_dir
db2 ROLLFORWARD DATABASE <db> TO END OF BACKLOG AND COMPLETE
此命令将通过应用归档日志将恢复的数据库回滚到一致状态。有关 ROLLFORWARD 命令的更多详细信息,请参阅 3。
数据库¶
无
公共 API¶
无
公共 API 安全¶
无
Python API¶
无
CLI (python-troveclient)¶
无
内部 API¶
无
Guest Agent¶
DB2 guestagent 将被修改以添加对全量在线备份和恢复功能的支持。此外,还将添加新的策略来支持这些新功能。
- 将修改以下 guestagent 文件
trove/guestagent/datastore/experimental/db2/service.py
trove/guestagent/datastore/experimental/db2/system.py
并且将修改以下新的策略文件,以添加一个用于在线备份的新类
trove/guestagent/strategies/backup/experimental/db2_impl.py
trove/guestagent/strategies/restore/experimental/db2_impl.py
将添加用于在线备份策略的新类,并且需要将现有类从 DB2Backup 重命名为 DB2OfflineBackup
备选方案¶
无
Dashboard 影响 (UX)¶
无
实现¶
负责人¶
Mariam John (johnma)
里程碑¶
Newton
工作项¶
此功能将只有一个工作项。这包括实现 DB2 在线备份和恢复的策略,并进行必要的 guestagent 更改。这还将包括测试新功能所需的测试用例。
升级影响¶
无
依赖项¶
无
测试¶
添加新的测试用例来测试 DB2 的在线备份和恢复功能
添加新的单元测试来测试新实现的功能
将一个新的 DB2 辅助类添加到现有的集成测试框架。
文档影响¶
数据存储文档应更新以反映启用的功能。
附录¶
无