借助 Spanner Omni,您可以按需或使用备份时间表创建数据库的完整备份。备份会存储数据库的全部数据。当运维人员或应用错误导致逻辑数据损坏时,您可以恢复备份。
Spanner Omni 备份概览
备份具有高可用性,可在创建后保留长达一年的时间。每个备份都有一个关联的 createTime 和 versionTime。createTime 是 Spanner Omni 开始创建备份的时间戳。versionTime 是备份捕获数据库内容的时间戳。备份包含数据库在 versionTime 的一致视图。
对于按需备份,createTime 和 versionTime 默认相同。如果需要,您可以在创建按需备份时指定较早的 versionTime(前提是该版本在数据库的版本保留期限内)。
对于预定备份,versionTime 是您在创建备份时间表时选择的时间。Spanner Omni 会在 versionTime 的四个小时内开始创建备份,因此 createTime 会在此四个小时的时间范围内。这与按需备份不同,在按需备份中,Spanner Omni 在收到请求时开始创建备份。
例如,假设您创建了一个备份时间表,其频率为 0 7 * * *
UTC(世界协调时间 [UTC] 每天上午 7:00 备份一次)。这意味着,对于每个备份,versionTime 为世界协调时间 (UTC) 上午 7:00,createTime 为世界协调时间 (UTC) 上午 7:00 到上午 11:00 之间的 4 小时时间段内的时间戳。
Spanner Omni 备份只能恢复到 Spanner Omni 部署中。您无法将托管式 Spanner 备份恢复到 Spanner Omni,也无法将 Spanner Omni 备份恢复到托管式 Spanner。如需在 Spanner 和 Spanner Omni 之间传输数据,请使用变更数据流或导出和导入 Avro 文件。如需了解详情,请参阅将数据从 Spanner 复制到 Spanner Omni 和导入和导出数据。
主要特性
Spanner Omni 备份可提供数据一致性、弹性外部复制和自动过期功能。
数据一致性:Spanner Omni 数据库的备份在备份的
versionTime具有事务一致性和外部一致性。复制:备份文件存储在 Spanner Omni 部署之外的外部存储系统中。
自动失效:所有备份都有一个用户指定的失效日期,用于确定何时删除备份。Spanner Omni 会以异步方式删除失效的备份,因此备份失效和实际删除之间可能会有延迟。
外部存储
外部存储空间表示 Spanner Omni 部署之外的远程存储空间。您可以将 Amazon Simple Storage Service (Amazon S3)、Cloud Storage 或任何与 Amazon S3 兼容的存储空间配置为外部存储空间。Spanner Omni 会将备份文件存储在此外部存储空间中。
外部存储空间管理
通过为备份创建、删除和列出存储位置来管理外部存储。
创建外部存储
如需创建 Amazon S3 外部存储,请运行以下命令:
spanner external-storages create EXTERNAL_STORAGE_ID \
--s3-bucket-name=BUCKET_NAME \
--s3-region=AWS_REGION \
--s3-assume-role-arn=ASSUME_ROLE_ARN
创建 Cloud Storage 外部存储
在配置 Cloud Storage 外部存储之前,请确保您具有以下各项:
- Google Cloud 项目中的目标 Cloud Storage 存储桶。
- Google Cloud 在目标存储桶上被授予 Storage Object Admin (
roles/storage.objectAdmin) Identity and Access Management (IAM) 角色的服务账号。如需了解详情,请参阅适用于 Cloud Storage 的 IAM 角色。 - 在 Spanner Omni 环境中配置的身份验证凭证,例如服务账号密钥文件或通过工作负载身份联合交换的凭证。如需详细了解如何从外部环境进行身份验证,请参阅为 AWS 虚拟机配置工作负载身份联合和为 Kubernetes 配置工作负载身份联合。
如需将 Cloud Storage 存储桶注册为外部存储,请运行以下命令:
spanner external-storages create EXTERNAL_STORAGE_ID \
--gcs-bucket-name=BUCKET_NAME
替换以下内容:
EXTERNAL_STORAGE_ID:外部存储配置的唯一标识符,例如gcp-gcs-backup-target。BUCKET_NAME:目标 Cloud Storage 存储桶的名称。
创建与 Amazon S3 兼容的外部存储空间
如需创建与 Amazon S3 兼容的外部存储,请运行以下命令:
spanner external-storages create EXTERNAL_STORAGE_ID \
--s3-compatible-bucket-name=BUCKET_NAME \
--s3-compatible-endpoint=ENDPOINT \
--s3-compatible-credential-file-path=FILE
删除外部存储空间
如需删除外部存储空间,请先确保不存在任何现有备份或正在进行的备份。然后运行以下命令:
spanner external-storages delete EXTERNAL_STORAGE_ID
描述外部存储空间
如需获取有关外部存储空间的信息,请运行以下命令:
spanner external-storages describe EXTERNAL_STORAGE_ID
列出外部存储空间
如需获取外部存储空间列表,请运行以下命令:
spanner external-storages list
备份描述符
备份描述符表示存储在外部存储空间中的已完成备份的元数据和备份文件路径。
spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID
备份信息
创建备份时,备份元数据会存储在 Spanner Omni 中,而备份文件则位于外部存储中。
备份包含数据库在备份 versionTime 时的以下信息:
完整备份包含所有数据。
架构信息,包括表名称、字段、数据类型、二级索引、变更数据流以及这些实体之间的关系。
使用
ALTER DATABASE SET OPTIONS命令设置的所有数据库选项。
Spanner Omni 备份不包含以下信息:
versionTime之后对数据或架构进行的任何修改。而遭拒的实例
变更数据流数据记录。虽然系统会存储变更数据流架构,但变更数据流数据应在与其描述的变更大致相同的时间进行流式传输和使用。
为帮助确保备份的外部一致性,Spanner Omni 会将数据库内容固定在 versionTime。这样可以防止垃圾回收系统在备份操作期间移除相关数据值。
备份管理
如需创建备份,您需要拥有以下权限。请让您的管理员为您授予部署的以下 IAM 角色:
| 操作 | IAM 角色 |
|---|---|
| 创建、查看、更新和删除备份 | roles/spanner.backupAdmin |
| 创建和查看备份 | roles/spanner.backupWriter |
创建备份
创建按需备份。
spanner backups create BACKUP_NAME \
--database=DATABASE_ID \
--retention-period=RETENTION_PERIOD \
--async
删除备份
删除备份元数据和文件。
spanner backups delete BACKUP_NAME
描述备份
检索备份的相关信息。
spanner backups describe BACKUP_NAME
列出备份
列出部署中的现有 Spanner Omni 备份。
spanner backups list
更新备份到期时间
更新备份的失效日期。
spanner backups update-metadata BACKUP_NAME \
--expiration-date=EXPIRATION_DATE
导入备份
如需在其他 Spanner Omni 部署中恢复数据库(例如,在 Spanner Omni 部署之间恢复,或者在删除原始部署后恢复),如果备份文件仍保留在外部存储中,您可以导入备份:
在新的部署中创建外部存储空间,该存储空间使用与原始部署相同的 Amazon S3 或 Cloud Storage 存储桶,例如:
spanner external-storages create EXTERNAL_STORAGE_ID \ --gcs-bucket-name=BUCKET_NAME列出外部存储空间中的备份描述符:
spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID将备份元数据导入新部署:
spanner backups import BACKUP_NAME \ --external-storage=EXTERNAL_STORAGE_ID \ --backup-descriptor=BACKUP_DESCRIPTOR \ --retention-period=RETENTION_PERIOD替换以下内容:
BACKUP_NAME:导入的备份的名称。EXTERNAL_STORAGE_ID:外部存储配置的 ID。BACKUP_DESCRIPTOR:上一步中返回的描述符 ID。RETENTION_PERIOD:备份的保留时长,例如24h或30d。
导入备份元数据后,您可以将备份恢复到部署中的新数据库。如需了解详情,请参阅恢复 Spanner Omni 备份。
备份时间表
Spanner Omni 可让您为数据库安排完整备份。您可以在时间表中指定 Spanner Omni 创建备份的频率。
完整备份时间表每 12 小时或更长时间创建一次备份。备份会在所安排时间的 30 分钟内启动。每个数据库最多可以有四个备份时间表。
备份时间表管理
如需创建和管理备份时间表,您需要拥有以下权限。请让您的管理员为您授予部署的以下 IAM 角色:
创建、查看、更新和删除备份时间表:
roles/spanner.backupAdmin创建和查看备份时间表:
roles/spanner.backupWriter
创建备份时间表
为 Spanner Omni 数据库创建新的备份时间表。
spanner backup-schedules create SCHEDULE_ID \
--database=DATABASE_ID \
--retention-duration=RETENTION_DURATION \
--cron="CRONTAB_EXPRESSION"
获取备份时间表
获取有关特定备份时间表的信息。
spanner backup-schedules describe SCHEDULE_ID --database=DATABASE_ID
列出备份时间表
列出给定数据库的所有备份时间表。
spanner backup-schedules list --database=DATABASE_ID
更新备份时间表
更新现有备份时间表的属性。
spanner backup-schedules update SCHEDULE_ID \
--database=DATABASE_ID \
--retention-duration=RETENTION_DURATION \
--cron="CRONTAB_EXPRESSION"
删除备份时间表
从数据库中删除备份时间表。
spanner backup-schedules delete SCHEDULE_ID --database=DATABASE_ID
设置 IAM 访问权限控制政策
为备份时间表设置 IAM 访问权限控制政策。
spanner backup-schedules set-iam-policy SCHEDULE_ID \
--database=DATABASE_ID \
policy.json
获取 IAM 访问权限控制政策
获取备份时间表的 IAM 访问权限控制政策。
spanner backup-schedules get-iam-policy SCHEDULE_ID --database=DATABASE_ID
比较备份存储空间与数据库存储空间
备份的存储大小可能小于或大于创建时源数据库的存储大小。
备份的存储可能小于数据库的存储,因为备份仅包含数据的一个版本,而实时数据库由于正在进行的操作,可能包含多个版本。数据格式和压缩的差异也可能导致备份大小减小。
反之,备份的存储也可能大于数据库的存储,这取决于数据库的状态和创建备份的时间。
出于类似的原因,当您从备份恢复数据库时,其存储可能大于数据库的存储。如果备份创建后,大量数据被删除并压缩,则可能会出现这种情况。因此,备份大小取决于备份的创建时间以及随后对数据库进行的操作。
没有公式可以预测备份大小与实时数据库大小的比率。对于写入速率高的数据库(热数据库),备份可能小于实时数据库。不过,在某些情况下,备份大小也可能会更大。