借助 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)
政策。当您创建备份时,备份会驻留在同一个实例中,
将项目作为其源数据库。
您可以通过以下方式创建备份:
- 在 Google Cloud 控制台中
- 使用 Google Cloud CLI
- 使用客户端库
- 使用 REST 或 RPC API
创建备份时,必须指定源数据库、
备份资源和到期日期(备份创建后 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 会创建一个
备份资源和长时间运行的备份操作,以帮助跟踪进度
备份。备份会复制到
目标实例。如果某个可用区暂时不可用,则备份副本
只有在该区域恢复在线状态后才会完成。您将无法
在复制过程中删除目标实例。跟踪进度和
复制备份操作的完成状态,请按照
显示备份进度。
复制完成后,您可以删除不需要的源备份
。复制完成后,您可以使用
GetBackup
、UpdateBackup
和 DeleteBackup
(包含复制的备份)。
启动备份副本的前提条件
如果您要将备份复制到其他区域或项目中的实例, 需要先设置和配置目标实例。目的地 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 价格。