使用 Azure Cosmos DB 进行自动联机备份和还原

Azure Cosmos DB 可以定期自动备份所有数据。 自动备份不会影响数据库操作的性能或可用性。 所有备份单独存储在另一个存储服务中并在多个区域复制,针对区域性的灾难提供复原能力。 如果意外删除了 Cosmos DB 容器并且之后需要数据恢复或灾难恢复解决方案,那么自动备份将是合适的方案。

本文首先快速回顾一个 Cosmos DB 的数据冗余和可用性,并介绍备份。

Cosmos DB 的高可用性 - 回顾

Cosmos DB 旨在实现数据多区域分发 - 它允许缩放多个 Azure 区域中的吞吐量,并提供策略驱动的故障转移和透明的多宿主 API。 Azure Cosmos DB 为所有单区域帐户和具有松散一致性的所有多区域帐户提供 99.99% 的可用性 SLA,为所有多区域数据库帐户提供 99.999% 的读取可用性。 Azure Cosmos DB 中的所有写入在确认到客户端之前,都会通过本地数据中心内的副本仲裁持久提交到本地磁盘。 请注意,Cosmos DB 的高可用性依赖于本地存储,而不依赖于任何外部存储技术。 此外,如果数据库帐户与多个 Azure 区域关联,则还会将写入内容复制到其他区域。 若要调整吞吐量规模并以低延迟访问数据,可以拥有任意数量的与数据库帐户关联的读取区域。 在每个读取区域中,(复制的)数据持久保存在副本集中。

完整的自动化联机备份

糟糕,我删除了容器或数据库! 使用 Cosmos DB,不仅仅是数据,还有数据备份都能获得高度冗余,可以弹性应对区域性的灾难。 目前,执行这些自动化备份的时间间隔约为 4 小时,并且始终会存储最新的 2 次备份。 如果数据意外删除或损坏,请在 8 小时内联系 Azure 支持部门

这些备份不会影响数据库操作的性能或可用性。 Cosmos DB 在后台创建备份,不使用预配的 RU,不影响性能,也不影响数据库的可用性。

不同于存储在 Cosmos DB 中的数据,自动备份存储在 Azure Blob 存储服务中。 为了保证低延迟/高效上传,备份快照会上传到某个 Azure Blob 存储实例,该实例位于 Cosmos DB 数据库帐户当前写入区域所在的同一个区域。 此外,为了弹性应对区域性灾难,还会通过异地冗余存储 (GRS) 将 Azure Blob 存储中的每个备份数据快照复制到另一个区域。

备份保留期

如上所述,Azure Cosmos DB 在分区级别每四小时创建一次数据快照。 在任何给定时间,只保留最后两个快照。 但是,如果删除了集合/数据库,我们将保留给定集合/数据库中所有已删除分区的现有快照 30 天。

若要保留自己的快照,可以使用 Azure Cosmos DB 数据迁移工具中的“导出到 JSON”选项,计划其他备份。

从联机备份还原数据库

如果意外删除了数据库或集合,可以提交支持票证联系 Azure 支持,从上一次自动备份中还原数据。 如果由于数据损坏(包括删除了集合中的文档)而需要还原数据库,请参阅处理数据损坏,因为需要采取额外步骤,防止损坏的数据覆盖现有备份。 对于要还原备份的特定快照,Cosmos DB 要求数据在该快照的备份周期的持续时间内可用。

处理数据损坏

Azure Cosmos DB 保留数据库帐户中每个分区的最后两个备份。 意外删除容器(文档的集合)或数据库时,该模型可以很好地处理这种情况,因为它可以还原其中一个最新版本。 但是,在用户可能引入数据损坏问题的情况下,Azure Cosmos DB 可能不知道数据损坏,并且损坏可能已覆盖现有备份。 一旦检测到损坏情况,用户应删除损坏的容器(集合/图/表),以防止备份被损坏的数据覆盖。

后续步骤

若要在多个数据中心复制数据库,请参阅使用 Cosmos DB 全局分配数据

若要联系 Azure 支持,请 从 Azure 门户开具票证