数据存储区管理员

Datastore 模式 Firestore 以前支持启用 Datastore Admin,这是一个带有批量删除和备份功能的可选模块。Datastore Admin 已被更加可靠的替代方案取代:

访问 Datastore Admin

如果您之前启用了 Datastore Admin,则可以继续通过访问 https://ah-builtin-python-bundle-dot-PROJECT_ID.appspot.com/_ah/datastore_admin?app_id=PROJECT_ID 来使用该模块,其中 PROJECT_ID 是您的 Google Cloud 项目的 ID。如果您停用 Datastore Admin,则将无法重新启用该模块。

关于使用 Datastore Admin 功能时的注意事项

  • 对于复制、删除、备份,可能不会考虑最近的更新。
  • 所有 Datastore Admin 操作都发生在您的应用内,因此会计入您的配额
  • 我们强烈建议您在备份或恢复期间停用写入
  • 具有相同键的现有实体将在复制/恢复操作期间被覆盖。即使执行多次复制/恢复操作,也不会产生副本。复制/恢复操作不会删除额外的数据。
  • 如果您使用非默认队列进行备份/恢复,则只能在 queue.yaml 中指定目标 ah-builtin-python-bundle。您不能使用其他目标。

数据库访问权限

默认情况下,Datastore Admin 可以访问同一项目中的 Datastore 数据库,并且不需要 Datastore 的 Identity and Access Management 权限

备份数据

请按照以下步骤创建备份文件,用于数据导出或将来需要恢复数据时使用。

  1. 如果您还没有为项目创建存储分区,请先创建。或者,通过访问控制列表来检查项目的 App Engine 默认服务账号是否可以访问存储分区。默认情况下可能已经进行了此项设置,可以在需要时予以替换。

  2. (推荐)停用 Cloud Datastore 写入

  3. 打开 Datastore 管理

  4. 选择您希望备份的实体种类。

  5. 点击备份实体以显示备份表单。

  6. 注意,此时将提供一个备份名称,其中包含一个日期戳。

    如果每天要执行多次备份,则必须更改此值,因为如果已存在同名备份,则不会执行备份。

  7. 请注意,备份作业会使用默认队列;在大多数情况下,您都可以使用此默认队列。

    如果您使用非默认队列进行备份/恢复,则只能在 queue.yaml 中指定目标 ah-builtin-python-bundle。您不能使用其他目标。

  8. 选择 Google Cloud Storage 作为备份存储位置。

  9. 选择 Cloud Storage 后,系统会提示您输入存储备份的存储分区名称,格式为 [BUCKET_NAME]。您可以视需要指定带有目录结构后缀的存储分区名称,例如 [BUCKET_NAME]/backups/foo。如果这些文件夹尚不存在,则系统会予以创建。

  10. 点击备份实体启动备份作业。请注意,此时会显示作业状态页面。备份作业状态

  11. 点击返回 Datastore 管理,以查看备份状态。

  12. 备份完成后,如果您停用了 Cloud Datastore 写入,请重新启用

备份和恢复注意事项

备份和恢复功能旨在帮助您导出数据,或恢复意外删除的数据。您可以备份所有实体,或者仅备份指定种类的实体,并且可以根据需要从其中某个备份中恢复。

备份会保存到 Cloud Storage。

请注意,备份不包含任何索引。在恢复时,将使用您随应用一同上传的索引定义来自动重建所需索引。

您还可以使用备份文件将数据导出到其他 Google Cloud 服务,例如 BigQuery

恢复不会为实体分配新 ID。恢复会使用备份时存在的 ID,并覆盖具有相同 ID 的任何现有实体。在恢复过程中,正在恢复的实体的 ID 将被预留。这样哪怕在恢复过程中启用了写入,也可以防止与新实体的 ID 产生冲突。自备份以来添加的新实体会被预留。

您可以从备份中恢复所有数据,也可以从备份中恢复特定的实体种类。此外,只要您使用 Cloud Storage 进行备份,您还可以使用此功能,将一个应用的数据备份恢复到其他某个应用。

取消备份

如果备份作业当前正在运行,它们将显示在 Cloud Datastore 管理界面的待处理备份列表中。

要停止这些正在运行的备份,请执行以下操作:

  1. 打开 Datastore 管理
  2. Pending Backups 部分中,从列表中选择备份并点击 Abort

取消备份作业时,App Engine 会尝试删除迄今为止已保存的备份数据。但在某些情况下,取消之后仍会保留一些文件。您可以在 Google Cloud Storage 的备份路径中找到这些文件,并在取消作业完成后将其安全地删除。这些文件的名称均以如下格式开头:datastore_backup_[BUCKET_NAME]

查找备份的相关信息

您可能希望查找备份的相关详细信息,例如其中包含哪些实体种类、在 Google Cloud Storage 中的保存位置及其开始和结束的时间。要显示此类备份信息,请执行以下操作:

  1. 打开 Datastore 管理
  2. 备份待处理备份列表中选择一个或多个备份。
  3. 点击信息显示这些备份的相关信息。
  4. 点击返回,回到 Cloud Datastore 的“管理”界面。

恢复数据

要利用备份进行恢复,请执行以下操作:

  1. (推荐)为您的应用停用 Cloud Datastore 写入。这样做可以避免恢复的数据与写入到 Cloud Datastore 的任何新数据之间发生冲突。
  2. 打开 Datastore 管理
  3. 在可用备份列表中,选择要恢复的备份。
  4. 点击 Restore
  5. 在显示的咨询页面中,注意带有复选框的实体列表。默认情况下,所有实体都将被恢复。取消选中您不想恢复的各实体旁边的复选框。
  6. 同样在咨询页面中,请注意,恢复作业将使用默认队列及其预配置的性能设置。如果您需要不同的队列性能特征,请将其更改为采用不同配置的其他队列,并确保所选队列没有在 queue.yaml 中指定除 ah-builtin-python-bundle 以外的任何目标。
  7. 点击恢复开始恢复。请注意,此时会显示作业状态页面。
  8. 点击返回 Datastore Admin,以查看恢复的状态。恢复状态
  9. 恢复完成后,如果停用了写入,请为您的应用重新启用 Cloud Datastore 写入

将数据恢复到其他应用

如果您使用 Google Cloud Storage 备份数据,则可以将备份恢复到原本用于创建备份的应用以外的其他应用。

将来自源应用的备份数据恢复到目标应用:

  1. 使用以下权限,在源应用的存储分区上创建身份和访问权限管理 (IAM) 政策

    • 主账号:[PROJECT_ID]@appspot.gserviceaccount.com
    • 角色Storage Legacy Bucket ReaderStorage Legacy Object Reader

    其中 [PROJECT_ID] 是目标应用的项目 ID。

  2. 在源应用中创建一个新备份

  3. (推荐)为您的目标应用停用 Cloud Datastore 写入,以避免恢复的数据与写入 Cloud Datastore 的新数据产生冲突。

  4. 打开 Datastore 管理

  5. 导入备份信息 (Import Backup Information) 按钮旁边的文本框中,以 /gs/[BUCKET_NAME] 的格式指定包含备份的源应用存储分区。备份存储分区
    或者,为特定备份提供文件句柄:要查看备份的文件句柄,请打开源应用的管理页面,选择备份,然后点击信息。您应该会在句柄标签旁边看到文件句柄。

  6. 点击导入备份信息
    除非您按句柄指定备份,否则出现的选择页面将显示您所指定存储分区的可用备份。选择所需备份并点击以下选项之一:

    • 如果希望将此备份保留在应用的可用备份列表中,请点击 Add to backup list
    • 如果要从此备份中进行恢复,但不希望将备份显示在应用的可用备份列表中,请点击 Restore from backup
  7. 在显示的咨询页面中,注意带有复选框的实体列表。默认情况下,所有实体都将被恢复。取消选中您不想恢复的各实体旁边的复选框。

  8. 同样在咨询页面中,请注意,恢复作业将使用默认队列及其预配置的性能设置。如果您需要不同的队列性能特征,请将其更改为您已经采用不同方式配置的另一个队列。

  9. 点击 Restore 开始恢复。请注意,此时会显示作业状态页面。

  10. 恢复完成后,如果您停用了 Cloud Datastore 写入,请重新启用

查看资源使用情况

高度频繁的备份往往会导致成本增加。当您运行 Cloud Datastore 管理作业时,您实际上运行的是底层 MapReduce 作业。MapReduce 作业会导致 Storage 操作和 Storage 使用情况基础上的前端实例使用小时数增加。

如需查看您的资源使用情况,请执行以下操作:

  1. 访问 Google Cloud 控制台中的 App Engine 页面。

    转到 App Engine 页面

  2. 使用页面顶部的下拉菜单选择 default 服务和 ah-builtin-python-bundle 版本。

启用或停用数据库写入

在恢复之前,通常建议停用写入。这有助于避免恢复操作与写入到数据库的任何新数据之间发生冲突。

停用写入可防止通过以下方式更改实体

  • Datastore 查看器。
  • 使用 Datastore API 的应用。

如需启用或停用写入,请执行以下操作:

  1. 转到管理页面。

    转到“管理”页面

  2. 点击启用写入以启用写入,或点击停用写入以停用写入。根据项目的状态,按钮文本会有所不同。

查看 Datastore Admin 资源使用情况

当您运行 Datastore Admin 作业时,您实际上运行的是底层 MapReduce 作业。MapReduce 作业不但会产生 Storage 操作和 Storage 用量,还会增加前端实例小时数。

如需查看您的资源使用情况,请执行以下操作:

  1. 访问 Google Cloud 控制台中的 App Engine 页面。

    转到 App Engine 页面

  2. 使用页面顶部的下拉菜单选择 default 服务和 ah-builtin-python-bundle 版本。

停用 Datastore Admin 访问权限

  1. 运行以下命令,并将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://appengine.googleapis.com/v1/apps/PROJECT_ID/services/default/versions/ah-builtin-python-bundle