备份概览

借助 Spanner 备份,您可以创建 按需使用 Spanner 数据库,并恢复它们以提供 针对操作者和应用错误提供保护,这些错误会导致逻辑数据 或破坏。备份具备高可用性和加密功能,最长可保留 自创建之日起 1 年内有效。创建备份后,备份会位于与其源数据库相同的实例、区域和项目中。如果您 需要在其他区域或项目中恢复备份以确保合规性或 因此您可以将备份复制到 独立的区域或项目如需保留超过一年的备份,我们建议您导出数据库。为防止出现逻辑 数据损坏,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 政策),因此当您 恢复数据库时,该数据库最初会从其父级继承政策 实例。

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

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

  • 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(包含复制的备份)。

启动备份副本的前提条件

如果您要将备份复制到其他区域或项目中的实例, 需要先设置和配置目标实例。目的地 instance 是备份副本所在的实例。它可以是 小至 100 个处理单元,它不会 需要具有与源实例相同的实例配置(即 实例)。在恢复之前,请确保目标实例已预配足够的节点或处理单元,以便根据每个节点 10 TB 的存储空间限制来支持数据库大小(也就是说,您需要至少 2 个节点才能恢复 20 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 小时的费用。

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

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

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

Spanner 优化了复制过程, 跨区域转移。这有助于最大限度地降低数据传输费用 提供快速复制备份体验。

备份会单独存储和计费。备份存储空间不会影响 数据库存储空间结算数据库存储空间上限。有关 另请参阅存储空间利用率指标

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

后续步骤