备份和恢复数据

本页面介绍了如何使用 Cloud Firestore 计划备份功能。使用备份可以保护您的数据免遭应用级数据损坏或意外的数据删除。

通过备份,您可以将备份时间表配置为每天或每周对指定的数据库进行备份。然后,您可以使用这些备份将数据恢复到新数据库。

备份简介

备份是指数据库在某个时间点的一致副本。备份包含该时间点的所有数据和索引配置。备份不包含数据库存留时间政策。备份与源数据库位于同一位置。

备份的保留期限可配置,并且会存储到保留期限到期或您删除备份为止。如果删除源数据库,将不会自动删除相关备份。

Cloud Firestore 会存储与数据库相关的备份和备份时间表的元数据。Cloud Firestore 会保留这些元数据,直到数据库的所有备份过期或被删除。

创建或保留备份的操作不会影响实时数据库中的读取或写入性能。

费用

使用备份时,您需要为以下各项支付费用:

  • 每个备份所使用的存储空间容量。
  • 对于恢复操作,您需要根据备份大小支付费用。

如需了解详情和确切费率,请参阅价格页面。

准备工作

此功能要求使用 Blaze 定价方案

所需的角色

如需获取管理备份和备份时间表所需的权限,请让您的管理员为您授予以下一个或多个 Identity and Access Management 角色:

  • roles/datastore.owner:拥有对 Cloud Firestore 数据库的完整访问权限
  • 以下角色也可用,但不会在 Google Cloud Platform 控制台中显示。使用 Google Cloud CLI 可分配这些角色:

    • roles/datastore.backupsAdmin:拥有对备份的读写权限
    • roles/datastore.backupsViewer:拥有对备份的读取权限
    • roles/datastore.backupSchedulesAdmin:拥有对备份时间表的读写权限
    • roles/datastore.backupSchedulesViewer:拥有对备份时间表的读取权限
    • roles/datastore.restoreAdmin:拥有启动恢复操作的权限

创建和管理备份时间表

以下示例演示了如何设置备份时间表。对于每个数据库,您最多可以配置一个每日备份时间表和一个每周备份时间表。您无法为一周中的不同日期配置多个每周备份时间表。

您无法配置备份的确切时段。系统会在每天的不同时间进行备份。对于每周备份时间表,您可以配置在星期几进行备份。

创建备份时间表

如需为数据库创建备份时间表,请使用 gcloud alpha firestore backups schedules create 命令。

创建每日备份时间表

如需创建每日备份时间表,请将 --recurrence 标志设置为 daily

gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

请替换以下内容:

  • DATABASE_ID:要备份的数据库的 ID。对于默认数据库,应设置为 (default)
  • RETENTION_PERIOD:对于 daily 备份重复周期,请将此项设置为一个不超过 7 天 (7d) 的值。如果您设置 weekly 备份重复周期,请将此项设置为一个不超过 14 周 (14w) 的值。

创建每周备份时间表

如需创建每周备份时间表,请将 --recurrence 标志设置为 weekly

gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY

请替换以下内容:

  • DATABASE_ID:要备份的数据库的 ID。对于默认数据库,应设置为 (default)
  • RETENTION_PERIOD:对于 weekly 备份重复周期,请将此项设置为一个不超过 14 周 (14w) 的值。
  • DAY:在星期几进行备份。设置为以下其中一项:
    • SUN 表示周日
    • MON 表示周一
    • TUE 表示周二
    • WED 表示周三
    • THU 表示周四
    • FRI 表示周五
    • SAT 表示周六

列出备份时间表

如需列出数据库的所有备份时间表,请使用 gcloud alpha firestore backups schedules list 命令。此命令会返回所有备份时间表的相关信息。

gcloud alpha firestore backups schedules list \
--database='DATABASE_ID'

DATABASE_ID 替换为数据库的 ID。对于默认数据库,请使用 (default)

描述备份时间表

如需检索备份时间表的相关信息,请使用 gcloud alpha firestore backups schedules describe 命令:

gcloud alpha firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID

请替换以下内容:

  • DATABASE_ID:要备份的数据库的 ID。对于默认数据库,应设置为 (default)
  • BACKUP_SCHEDULE_ID:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。

更新备份时间表

如需更新备份时间表的保留期限,请使用 gcloud alpha firestore backups schedules update 命令:

gcloud alpha firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
--retention=RETENTION_PERIOD

请替换以下内容:

  • DATABASE_ID:要备份的数据库的 ID。对于默认数据库,应设置为 (default)
  • BACKUP_SCHEDULE_ID:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。
  • RETENTION_PERIOD:如果您设置 daily 备份重复周期,请将此项设置为一个不超过 7 天 (7d) 的值。如果您设置 weekly 备份重复周期,请将此项设置为一个不超过 14 周 (14w) 的值。

删除备份时间表

如需删除备份时间表,请使用 gcloud alpha firestore backups schedules delete 命令:

gcloud alpha firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID

请替换以下内容:

  • DATABASE_ID:要备份的数据库的 ID。对于默认数据库,应设置为 (default)
  • BACKUP_SCHEDULE_ID:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。

请注意,删除备份时间表时,不会删除此时间表已创建的备份。您可以等待其在保留期限结束后过期;如需手动删除备份,请参阅删除备份

管理备份

列出备份

如需列出可用的备份,请使用 gcloud alpha firestore backups list 命令:

gcloud alpha firestore backups list \
--format="table(name, database, state)"

--format="table(name, database, state)" 标志将输出的格式设置为更易于阅读的格式。

如需仅列出来自特定位置的备份,请使用 --location 标志:

gcloud alpha firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"

LOCATION 替换为 Cloud Firestore 位置的名称。

描述备份

如需查看有关备份的详细信息,请使用 gcloud alpha firestore backups describe 命令:

gcloud alpha firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
  • LOCATION:数据库的位置。
  • BACKUP_ID:备份的 ID。您可以在列出所有备份时查看每个备份的 ID。

删除备份

如需删除备份,请使用 gcloud alpha firestore backups delete 命令:

gcloud alpha firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
  • LOCATION:数据库的位置。
  • BACKUP_ID:备份的 ID。您可以在列出所有备份时查看每个备份的 ID。

通过数据库备份恢复数据

恢复操作会将备份中的数据写入新的 Cloud Firestore 数据库。如需开始执行恢复操作,请使用 gcloud alpha firestore databases restore 命令:

gcloud alpha firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
  • PROJECT_ID:您的项目 ID。
  • LOCATION:数据库备份的位置以及为恢复的数据创建的新数据库的位置。
  • BACKUP_ID:备份的 ID。 您可以在列出所有备份时查看每个备份的 ID。
  • DATABASE_ID:新数据库的 ID。您无法使用已在使用的数据库 ID。

输出将包含 metadatanameresponse 这三个组成部分:

metadata:
  '@type': type.googleapis.com/google.firestore.admin.v1.RestoreDatabaseMetadata
  backup: projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID
  database: projects/PROJECT_ID/databases/DATABASE_ID
  operationState: PROCESSING
  progressPercentage:
    completedWork: '20'
    estimatedWork: '100'
  startTime: '2023-12-06T14:20:17.398325Z'
name: projects/PROJECT_ID/databases/DATABASE_ID/operations/operation_uuid
response:
  '@type': type.googleapis.com/google.firestore.admin.v1.Database
  createTime: '2023-12-06T14:20:17.398325Z'
  name: projects/PROJECT_ID/databases/DATABASE_ID
  ...

metadata 字段包含一个 progressPercentage 组成部分(详细说明目前为止恢复的估算进度)和一个 operationState(用于指定恢复的总体状态)。

如需再次检索此信息,请使用 gcloud firestore operations list

gcloud firestore operations list --database=DATABASE_ID

或者,将上述输出中的 name 字段与 gcloud firestore operations describe 搭配使用:

gcloud firestore operations describe OPERATION_NAME