备份概览

借助 Spanner 备份,您可以按需创建 Spanner 数据库的备份并恢复这些备份,以防范导致逻辑数据损坏的操作和应用错误。备份具有高可用性和加密功能,并且最长可保留一年(自创建之时算起)。创建备份时,备份与其源数据库位于同一实例、区域和项目中。如果您出于合规性或业务连续性需要在其他区域或项目中恢复备份,可以将备份复制到其他区域或项目中的实例。如需将备份保留超过一年,我们建议导出数据库。为了防止逻辑数据损坏,Spanner 还提供了时间点恢复。您还可以启用数据库删除保护,以防止意外删除数据库。

主要特征

  • 数据一致性:备份是 Spanner 数据库在备份 version_time 处的事务性和外部一致副本。

  • 复制:备份与其源数据库驻留在同一个实例中,并且复制到相同的地理位置。对于区域实例,备份存储在三个读写可用区中的每个区域中。对于双区域实例和多区域实例,备份存储在包含读写副本或只读副本的所有区域中。如果您需要将数据库的备份存储在其他区域或项目中,则可以将已完成的备份从源实例复制到其他区域或项目中的目标实例。如需了解详情,请参阅复制备份

  • 自动失效:所有备份都有用户指定的失效日期,该日期决定了备份将于何时自动删除。Spanner 会异步删除过期的备份,因此备份过期与实际删除之间可能存在延迟。

下表介绍了几种备份策略、建议的方案实现方法,以及建议方法的最长保留时间。

备份策略 推荐方法 建议方法的最长保留期限
将数据库备份存储在与其源数据库相同的实例、区域和项目中 创建备份 1 年
将数据库的备份存储在与其源数据库不同的实例、区域或项目中(即跨区域备份或跨项目备份) 创建备份,然后将其复制到其他区域或项目中的实例。 1 年
在 Cloud Storage 中存储备份 将数据库导出到 Cloud Storage 存储桶。有关备份与导出的详细比较,请参阅选择备份和恢复还是导入和导出 无限制(保留到删除)
时间点恢复 (PITR) 如需从过去某个时间点恢复数据,请选择 PITR。您可以将数据库 version_retention_period 从默认的 1 小时更改为最多 7 天。 7 天

使用 Identity and Access Management (IAM) 进行访问权限控制

借助 IAM,您可以控制对 Spanner 资源(包括备份)的访问权限。如果您刚开始接触 IAM、角色和权限,请参阅 IAM 概览了解详情。

备份资源位于 Spanner 资源层次结构中的实例下。我们建议在项目级或实例级应用 IAM 政策。如果您需要更精细的控制,也可以在备份和数据库级层应用 IAM 政策,但由于复杂性原因,不建议这样做。请记住,备份不包含数据库元数据(如 IAM 政策),因此当您恢复数据库时,数据库最初会继承其父实例的政策。

本部分介绍有权访问备份和恢复的预定义角色。

以下角色专为备份而设计:

  • spanner.backupAdmin:有权创建、查看、更新、复制和删除备份。此角色还可以查看和管理备份的 IAM 政策。此角色无法从备份恢复数据库。
  • spanner.backupWriter:有权创建和复制备份,但无法更新或删除备份。此角色旨在供自动创建备份的脚本使用。

以下角色也可以访问 Spanner 备份:

  • spanner.admin:拥有对备份的完整访问权限。此角色拥有对所有 Spanner 资源的完整访问权限。
  • owner:拥有对备份的完整访问权限。
  • editor:拥有对备份的完整访问权限。
  • viewer:有权查看备份和备份操作。此角色无法创建、更新、删除或复制备份。

如需了解详情,请参阅 Spanner IAM

备份创建的工作原理

您可以为任何 Spanner 数据库创建备份。这些备份是完整的,因为它们包含备份的 version_time 处数据库中的所有数据(包括架构和二级索引)。在 version_time 之后对数据或架构所做的任何修改都不会包含在备份中。备份包括使用 ALTER DATABASE SET OPTIONS 命令设置的所有数据库选项,但不包含 Identity and Access Management (IAM) 政策。创建备份时,备份与其源数据库位于同一实例、区域和项目中。

您可以通过以下方式创建备份:

创建备份时,您必须指定源数据库、备份资源名称和到期日期(自备份创建之时算起,最长 1 年)。您还可以选择指定 version_time,以便将数据库备份到较早的时间点。version_time 字段通常用于同步多个数据库的备份或使用时间点恢复来恢复数据。如果未指定 version_time,则将其设置为备份的 create_time。系统会创建备份资源和长时间运行的备份操作来跟踪备份进度。新创建的备份与其源数据库位于同一实例、区域和项目中。

为了帮助确保备份的外部一致性,Spanner 会将数据库的内容固定在 create_time。这样可以防止垃圾回收系统在备份操作期间移除相关数据值。然后,实例中的每个读写和只读地区开始并行复制数据。如果任何可用区暂时不可用,则只有在该可用区恢复在线状态并完成之后,备份才会完成。操作完成后,可以立即恢复备份。对于多区域实例,所有区域中的所有读写和只读区域都必须完成其备份副本,然后才能将备份标记为可恢复。

备份还包含数据库变更数据流的架构,但不包含任何现有变更记录。变更数据流数据几乎会与其描述的更改同时流式传输和使用。因此,Spanner 会将这些数据从备份中排除。

备份复制的工作原理

借助 Spanner 备份和恢复,您可以将 Spanner 数据库的备份从一个实例复制到其他区域或项目中的另一个实例,从而提供额外的数据保护和合规性功能。复制的备份与原始备份具有相同的关键特性。此外,您可以在与复制的备份相同的实例中恢复已复制的备份,以支持跨区域和跨项目备份和恢复用例。

常见的跨区域用例

以下是复制备份的一些常见跨区域使用场景:

  • 在其他区域维护备份,以满足合规性和监管要求。

    例如,您可以将数据库的备份复制到与生产数据最小距离的区域中的实例,以满足合规性要求。

  • 在单独的区域维护备份,以实现灾难恢复和业务连续性。

    例如,您可以将备份数据库复制到目标实例,并使用非零恢复时间目标 (RTO) 和恢复点目标 (RPO) 进行灾难恢复。然后,如果需要,您可以从目标实例中复制的备份恢复数据库。(如果您的应用具有零 RTO 和零 RPO 要求,我们建议您为灾难恢复方案使用 Spanner 多区域配置。)

常见的跨项目用例

以下是复制备份的一些常见跨项目用例:

  • 在单独的项目中维护备份副本,以满足运营、安全性或合规性要求。
  • 在开发项目、测试项目和生产项目之间复制和移动数据。

    例如,如果要将数据从生产项目移动到测试项目,则可以创建生产数据的备份,然后将备份复制到测试项目。复制操作完成后,您可以将复制的备份恢复到测试项目中的实例。

  • 将数据库从一个项目移动到另一个项目(请注意,迁移过程中可能会停机)。

您可以将备份复制到其他区域或项目中的目标实例,方法是指定源备份、目标备份和有效期(最长为自源备份创建时间起一年)。这意味着,expiration_date 的值必须至少为处理当前复制请求后的 6 小时,且必须在源备份 create_time 后的 366 天内。

在复制备份请求开始时,Spanner 会创建备份资源和长时间运行的备份操作,以帮助跟踪备份进度。备份将复制到目标实例中的每个读写和只读地区。如果某个可用区暂时不可用,则在该可用区恢复在线状态之前,备份复制操作不会完成。在复制过程中,您无法删除目标实例。如需跟踪复制备份操作的进度和完成状态,请按照显示备份进度中的步骤操作。复制完成后,如果您不再需要源备份,可以将其删除。复制完成后,您可以对复制的备份使用 GetBackupUpdateBackupDeleteBackup 等操作。

启动备份副本的前提条件

如果您要将备份复制到其他区域或项目中的实例,则需要先设置和配置目标实例。目标实例是备份副本所在的实例。它可小至 100 个处理单元,并且不需要与源实例(源备份所在的实例)相同的实例配置。在恢复之前,请确保根据每个节点 4 TB 的存储空间限制,为目标实例预配足够的节点或处理单元来支持数据库大小(例如,您至少需要 2 个节点才能恢复 8 TB 的备份)。如需创建新的目标实例,请参阅创建和管理实例

其他注意事项

其他考虑因素包括:

  • 将源实例中的备份复制到目标实例时,复制的备份独立于其源备份。复制操作完成后,源实例中有一个备份,目标实例中有一个备份。如果源实例中不再需要备份,可以将其删除。
  • 将备份复制到区域实例时,备份数据会复制到目标实例中三个读写地区的每一个。
  • 将备份复制到多区域实例时,备份数据会复制到包含读写副本或只读副本的实例中的每个地区。
  • 您可以同时复制多个备份。
  • 在复制过程仍在进行期间,您可以更新或删除目标备份。如果您删除目标备份,正在进行的复制操作将因此取消。
  • 当有一项复制操作正在进行时,您可以在源实例中恢复备份。
  • 您可以在复制操作完成之前将其取消。

在复制过程中,不允许进行以下操作:

  • 复制操作正在进行中时,您无法删除源备份。
  • 在复制过程中,您无法对目标复制的备份启动新的复制或恢复操作。复制完成后,可以再次复制或恢复。

Spanner 备份的存储位置

备份是 Spanner 中的资源。 在资源层次结构中,每个备份资源都与其源数据库位于同一实例下,并且具有 projects/<project>/instances/<instance>/backups/<backup> 格式的资源路径。即使备份的源数据库已被删除,备份仍会存在,但存在时间不能比其父实例长。为防止意外删除备份,如果存在备份,则不能删除 Spanner 实例。如果要删除实例,我们建议您恢复备份,然后导出恢复的数据库,然后再删除备份和实例。

加密

Spanner 备份与数据库一样,通过 Google 管理的加密方式或客户管理的加密方式进行加密。默认情况下,备份使用与其数据库相同的加密配置,但您可以在创建备份时指定不同的加密配置,从而替换此行为。如果备份启用了 CMEK,则系统会在创建备份时使用 KMS 密钥的主要版本对其进行加密。创建备份后,即使 KMS 密钥已轮替,其密钥和密钥版本也无法修改。如需了解详情,请参阅创建启用 CMEK 的备份

默认情况下,复制的备份使用相同的加密配置(由 Google 管理或由客户管理 (CMEK))作为来源备份加密。您可以在复制备份时指定其他加密配置,从而替换此行为。如果您希望在跨区域复制时使用 CMEK 对复制的备份进行加密,请指定与目标区域对应的 KMS 密钥。

性能

本部分介绍了 Spanner 中的最佳备份性能。

备份性能

执行备份时,Spanner 会创建一个备份作业以将数据从数据库直接复制到备份存储空间,并根据数据库的大小调整此作业的大小。此备份作业不使用分配给数据库实例的 CPU 资源,因此不会影响实例的性能。此外,数据库实例上的计算负载不会影响备份操作的速度。如需跟踪备份操作的进度和完成情况,请参阅显示备份进度

通常,大多数备份需要 1-4 个小时。某些备份的大小或内部存在资源队列,因而可能需要更长时间。如果在其他因素未发生变化的情况下,备份花费的时间比平时长,可能是因为在可用区中安排备份任务时存在延迟。有时,此过程最长可能需要 30 分钟。我们建议您不要取消并重启备份,因为新的备份操作很可能会出现相同的调度延迟。

复制备份时的性能

复制备份所需的时间取决于源备份的大小以及为复制备份选择的目标区域等因素。通常,大多数副本会在 1-4 小时内完成。某些副本可能需要更长时间,具体取决于备份大小和目标区域。复制备份不会对源实例或数据库的性能产生影响。 您可以为不同区域中的实例创建多个并发源备份副本,而不会出现任何性能影响问题。

价格

您需要按照备份每单位时间的存储空间用量计费。备份操作完成后,系统会开始计费,直到备份被删除为止。您需要为完成的备份支付至少 24 小时的费用。如果您创建备份,然后在备份完成后一分钟删除,那么您仍然需要支付 24 小时的费用。

备份副本的存储费用与原始备份相同。如果您在占据不同区域的两个实例之间创建了副本,则需要支付出站数据传输费用

例如,如果您将数据库从源多区域实例配置 nam7 复制到目标多区域实例配置 nam-eur-asia3,则需要支付以下费用:

  • 针对重叠的 us-central1 区域免费
  • 见证者 us-central2 区域免费
  • 收取两次洲际数据传输费用:每个新大洲(欧洲和亚洲)一次
  • 对于 us-east1,您需要一次性支付同一大洲内不同区域之间的数据传输费用
  • 在欧洲,您需要一次性支付同一大洲不同区域之间的数据传输费用

Spanner 会优化复制过程,以最大限度地减少跨区域传输数量。这有助于最大限度地降低数据传输费用,同时提供快速复制备份体验。

备份会单独存储和计费。备份存储不会影响数据库存储的结算数据库存储限制。如需了解详情,另请参阅存储空间利用率指标

如需详细了解备份费用,请参阅 Spanner 价格

后续步骤