DB2 备份与恢复

目前,Trove 中的 DB2 Express C 数据存储缺乏备份和恢复功能。此蓝图旨在为 Trove 中的 DB2 添加备份和恢复功能。

Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/db2-backup-restore

问题描述

目前,无法使用 Trove 创建 DB2 数据库的备份,也无法从备份中恢复。由于此功能对于数据模型和典型用例至关重要,因此 Trove 添加此功能势在必行。

提议的变更

DB2 将实现最简单的数据库备份和恢复形式,在默认位置创建备份镜像。由于 DB2 数据库默认处于循环日志模式,因此无法进行在线备份。因此,此功能将实现完整的离线备份功能 1。目前,暂不支持 db2 的增量备份。将使用 LIST UTILITIES 命令来监控该过程。2

备份

DB2 的备份过程如下。3

  • 确定备份写入的目录。对于 DB2 数据库,默认目录位置可以在配置文件中找到(/etc/db2/db2 .conf)

  • 检查实例上是否有足够的磁盘空间用于备份。

  • 通过 CLI 启动 DB2 备份。BACKUP DATABASE 命令将用于此目的。

  • 备份完成后,在卷存储中压缩/加密备份。备份文件的名称将采用以下格式 - DB_alias.Type.Inst_name.NODEnnnn.CATNnnnn.timestamp.Seq_num

  • 将使用 db2ckbkp 命令显示有关现有备份镜像的信息。这将验证新创建的数据库备份。

  • 然后可以将压缩/加密的文件存储在 Swift 的 database_backups 容器中。

  • 一旦存储在 Swift 中,就可以删除 VM 上的旧备份文件。

由于 db2 仅支持流式传输到命名管道,因此无法一步完成备份,首先需要将备份文件存储在 VM 上。4

恢复

为了从备份恢复 DB2 数据库,将按照以下步骤进行。5

  • 确定备份文件存储的目录

  • 确保没有其他应用程序正在针对数据库运行

  • 将备份从存储中检索到正确的位置

  • 使用 RESTORE DATABASE 命令恢复数据库

配置

以下配置的默认值需要更改,以对应于相应的 DB2 位置。

  • backup_strategy

  • backup_namespace

  • restore_namespace

数据库

公共 API

DB2 备份和恢复功能的实现将允许用户对 DB2 数据存储使用几个 CLI 命令。

公共 API 安全

Python API

CLI (python-troveclient)

以下命令将适用于 DB2

  • backup-create

  • backup-delete

  • backup-list

  • backup-list-instance

  • backup-show

  • create –backup

内部 API

Guest Agent

DB2 客体代理将被修改以支持备份和恢复。特别是,以下文件将添加组件-

guestagent/strategies/backup/experimental/db2_impl.py
guestagent/strategies/restore/experimental/db2_impl.py

将更新以下现有文件

guestagent/datastore/experimental/db2/manager.py

它将与 API 和任务管理器向后兼容。

备选方案

可以实现的另一种类型的备份是联机备份,这样在进行备份之前无需关闭数据库。但是,要实现联机备份,数据库必须具有归档日志选项。目前,无法在 Trove 中为 DB2 数据库指定日志选项。一旦用户可以配置其他日志选项(如归档日志),就可以实现联机备份。

Dashboard 影响 (UX)

待定 (在批准后添加的部分)

实现

负责人

主要负责人

imandhan

里程碑

完成目标里程碑

Mitaka-1

工作项

  • 实现备份和恢复 API 调用。

  • 编写相关的测试用例。

升级影响

依赖项

测试

将根据需要为备份和恢复功能添加单元测试。此外,还将向现有的集成测试框架添加 db2 助手。

文档影响

应更新 DB2 Trove 文档,以指示支持备份和恢复。

附录