数据恢复概览

更新时间:
复制 MD 格式

云数据库MongoDB提供了多种数据恢复方案,可满足不同场景下MongoDB数据库的数据恢复需求。

数据恢复至云数据库MongoDB实例

重要

将数据恢复至新实例时,请注意以下事项:

  • 新实例的数据库大版本需与原实例相同。您需要根据原实例的数据库版本选择支持部署的可用区。不同数据库版本的实例,支持部署的可用区不同。关于不同数据库版本实例的可用区限制,请参见使用限制。

  • 新实例的存储空间需大于或等于原实例的存储空间。

  • 如果您升级过数据库的大版本,旧版本的备份文件将无法恢复到新版本的数据库中。

  • 恢复数据时新建的实例默认为最新内核小版本。

  • 如果您的实例中包含时序集合(MongoDB 5.0及以上版本),则进行按时间点恢复时可能会在oplog回放阶段遇到问题。

方案

实例限制

恢复位置

恢复范围

适用场景

恢复云数据库MongoDB单个或多个数据库

  • 云盘版副本集实例

  • 云盘版分片集群实例

原实例

  • 全部数据库

  • 部分数据库

误删了某个集合或文档。

MongoDB 4.0或4.2版本的本地盘版副本集实例

说明

实例所在地域等限制请参见使用限制。

新实例

从备份点新建实例

  • 单节点实例

  • 副本集实例

新实例

  • 全部数据库

  • 部分数据库

说明

仅本地盘版实例支持恢复部分数据库。

对数据的时效性要求不高的场景。

按时间点新建实例

副本集实例

新实例

  • 全部数据库

  • 部分数据库

说明

仅本地盘版实例支持恢复部分数据库。

将数据还原至某个时间点。

分片集群实例

新实例

全部数据库

按Key闪回

MongoDB 5.0及以上的分片集群云盘版实例

原实例

部分Key

适用于小部分数据错乱或意外丢失场景,根据数据的闪回Key可对这部分数据进行回档,快速恢复数据。

跨地域恢复数据

  • 副本集云盘版实例

  • 分片集群云盘版实例

新实例

全部数据库

适用于数据监管或容灾恢复等需求场景,可以使用备份文件将数据恢复到跨地域备份所在地域的新实例。

数据恢复至自建数据库

将数据恢复至自建数据库时,您需要将云数据库MongoDB的备份文件下载到本地。如何下载备份文件,请参见下载备份文件。

方案

实例限制

注意事项

将MongoDB逻辑备份文件恢复至自建数据库

  • 副本集实例,且数据库版本为4.2及以下、存储类型为SSD本地盘。

  • 分片集群实例,且数据库版本为4.2及以下、存储类型为SSD本地盘。

由于MongoDB一直在迭代更新,旧版本的Mongorestore不能兼容新版本的MongoDB。请选择合适的Mongorestore版本,以兼容MongoDB,如何选择Mongorestore版本,请参见mongorestore。

本地盘备份数据恢复

副本集实例,且满足以下条件:

  • 实例未开启透明数据加密TDE(Transparent Data Encryption)功能。关于TDE的更多信息,请参见TDE功能。

  • 实例的存储引擎:WiredTiger或RocksDB。

无。

常见问题

如何恢复更早之前的数据?

实例数据可以恢复到的时间范围,与备份数据的保留天数相关。如果您希望恢复更早之前的数据,请参见长期保留备份。

恢复数据到新实例的时间预估需要多久?

恢复数据到新实例的耗时取决于实例的存储类型、备份数据量、需要回放的oplog数据量以及新实例规格,通常需要数分钟到数小时不等。

一次完整的恢复包含以下三个阶段,总耗时为三个阶段之和:

阶段

说明

是否与数据量相关

创建新实例

按照您指定的规格创建并配置目标实例。

恢复全量备份

将全量备份数据还原到新实例。

恢复增量备份(oplog回放)

将全量备份时间点至目标时间点之间的增量数据回放到新实例。

说明

从备份点新建实例时不涉及增量恢复,无需计算第三阶段耗时;按时间点新建实例时,需要将数据回放至您指定的时间点,因此包含第三阶段。下文中两种存储类型的表格对“创建新实例”阶段做了进一步细分。

云盘版实例

云盘版实例的全量恢复基于云盘快照实现,通过挂载快照完成数据还原,该阶段耗时与数据量基本无关。

以下时间以4核8 GB副本集实例为参考:

阶段

预计耗时

创建新实例

10~15分钟

恢复全量备份(快照挂载)

通常为5~10分钟,与数据量基本无关。

实例启动与初始化

2~5分钟

恢复增量备份(oplog回放)

与增量数据量及内容复杂度相关,详见下文的影响恢复耗时的因素。

算例:一个4核8 GB的云盘版副本集实例,从备份点新建实例时,无论数据量为20 GB还是1 TB,通常在20~30分钟内完成;如按时间点新建实例,需在上述时间基础上,根据备份点至目标时间点之间产生的oplog数据量追加回放耗时。

本地盘版实例

本地盘版实例的全量恢复需要先从备份存储下载备份集,再在目标节点上解压,因此耗时与备份集大小、数据文件个数均相关。

以下时间以4核8 GB副本集实例为参考:

阶段

预计耗时

创建新实例

10~15分钟

下载全量备份集

参考速率为50~200 GB/小时,受实例规格与网络状况影响。

解压全量备份集

与数据文件个数相关,详见下方说明。

下载oplog

参考速率为50~200 GB/小时。

回放oplog

与增量数据量及内容复杂度相关,详见下文的影响恢复耗时的因素。

说明

解压阶段的耗时主要由备份集中的数据文件个数决定,而非仅由备份集容量决定。实例中的集合数与索引数越多,数据文件个数越多,解压耗时越长。常规实例的解压耗时为分钟级;集合与索引数量达到数十万量级的实例,解压阶段可能耗时数小时甚至更长,属于正常现象,详情请参见库表数太多导致实例卡顿或异常。若您的实例集合数量较多且对恢复时效有较高要求,建议优先选用云盘版实例。

算例:一个4核8 GB的本地盘版副本集实例,数据量为200 GB,从备份点新建实例。假设下载速率为100 GB/小时、解压耗时约30分钟,则端到端约需3小时;如按时间点新建实例,还需追加oplog下载与回放的耗时。

说明

上述耗时均为经验参考值,不构成服务承诺。如恢复任务长时间无进展,请提交工单联系技术支持。

影响恢复耗时的因素
  • 存储类型:云盘版实例的全量恢复基于快照挂载,速度显著快于本地盘版实例的下载与解压。

  • 备份集大小:备份数据量越大,本地盘版实例的下载耗时越长;云盘版实例不受此影响。

  • 数据文件个数:集合数与索引数越多,本地盘版实例的解压耗时越长。

  • 新实例规格:新实例的CPU核数、内存和磁盘IOPS越高,下载、解压与oplog回放速度越快。使用低规格实例恢复大数据量实例时,耗时会明显增加。

  • oplog数据量:按时间点新建实例时,所选时间点距离全量备份时间点越远,需要回放的oplog越多,耗时越长。

  • oplog内容复杂度:oplog中的多文档事务需串行回放,无法并行加速;大文档、热点更新会带来额外的写入放大。在复杂写入负载下,即使提高实例规格,回放速度也可能无明显改善。

  • 源实例写入速率:按时间点新建实例时,源实例写入越快,同一时间窗口内产生的oplog越多,回放耗时越长。

  • 分片集群:分片集群的ConfigServer、各分片与Mongos并行恢复,整体完成时间取决于耗时最长的组件,通常不短于同等数据量的副本集实例。

缩短恢复耗时的建议
  • 优先选用云盘版实例,其全量恢复为分钟级,且不受数据量与集合数量影响。

  • 为新实例选择不低于源实例的规格,避免在恢复阶段出现规格瓶颈。

  • 优先从备份点新建实例。如业务允许,选择距离目标时间点最近的备份点,可减少甚至免除oplog回放耗时。

  • 控制集合与索引数量,及时清理不再使用的集合和索引,可显著降低本地盘版实例的解压耗时。

  • 开启高频备份,缩短备份点与目标时间点之间的间隔,从而减少需要回放的oplog数据量。

希望将备份数据恢复至原实例,如何进行操作?

分片集群云盘版实例可以使用库表恢复功能将数据恢复至原实例。具体操作,请参见恢复云数据库MongoDB单个或多个数据库。

若您的实例不支持通过库表恢复功能恢复至原实例,可以先将备份数据恢复至新实例,然后依次修改原实例与新实例的连接地址和端口信息,或者通过DTS将新实例的数据迁移至原实例。

已下载的备份文件,如何恢复至云数据库MongoDB实例?

已下载的备份文件,不支持直接恢复至云数据库实例。您可以先将数据恢复至自建数据库,然后通过DTS迁移至云数据库MongoDB实例。DTS迁移的具体操作,请参见源为自建MongoDB或云数据库MongoDB的迁移方案。

实例类型不支持下载备份文件时,如何将数据恢复至自建数据库?

为什么克隆恢复的分片集群实例的分片ID与sh.status()结果不一致?

分片集群实例的Config Server中存储了所有分片集合的路由元数据(例如config.collections和config.chunks等集合)。这些集合的文档中包含类似shard: 'shard01'的字段,用于标识数据所属的分片。克隆恢复时需要使用源实例的完整路由数据,因此必须保留源实例的分片ID(即分片名称),导致克隆实例的分片ID与sh.status()输出中显示的分片名称不一致。

您可以通过控制台分片集群实例详情页中展示的分片标识ID(即replicaSetName),结合sh.status()的输出结果来建立分片的映射关系。该映射关系在恢复完成后不会发生变化。