使用 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,不仅仅是数据,还有数据备份都能获得高度冗余,可以弹性应对区域性的灾难。 这些自动备份当前大约每四小时进行一次,并且始终存储最新的两个备份。 如果数据意外删除或损坏,请在八小时内联系 Azure 支持部门

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

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

备份保留期

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

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

Note

如果“在数据库级别为一组容器预配吞吐量”,请记得在整个数据库帐户级别进行还原操作。 如果无意中使用此新功能删除了容器(集合),还需确保在 8 小时内联系我们的支持部门。

从联机备份还原数据库

如果意外删除了数据库或集合,可以提交支持票证联系 Azure 支持,从上一次自动备份中还原数据。 Azure 支持仅适用于选定计划(例如标准计划、发开人员计划),不适用于基本计划。 若要了解不同的支持方案,请参阅 Azure 支持计划页。 如果由于数据损坏(包括删除了集合中的文档)而需要还原数据库,请参阅处理数据损坏,因为需要采取额外步骤,防止损坏的数据覆盖现有备份。 对于要还原备份的特定快照,Cosmos DB 要求数据在该快照的备份周期的持续时间内可用。

处理数据损坏

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

后续步骤

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

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