恢复实例

本页面介绍了如何从备份恢复实例以及执行实例的时间点恢复。

如需了解恢复操作或时间点恢复的相关信息、最佳做法和要求,请参阅实例恢复概览

从备份恢复实例

您可以使用备份恢复最初获得该备份的同一实例,也可以使用备份恢复同一项目中的不同实例。

恢复到不同实例

当您使用备份恢复到不同实例时,即是让目标实例上的数据更新为进行备份时源实例的状态。如需了解详情,请参阅关于执行恢复操作的一般提示以及关于恢复到不同实例的提示和要求

如果您需要项目的备份列表,但因出现服务中断而无法在实例概览页面上查看这些备份,则可以将 backupRuns.list API 与通配符 (-) 结合使用。通配符选项可以检索项目中所有实例的所有备份列表。如需了解详情,请参阅在服务中断期间查看备份

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如果目标实例具有任何读取副本,请使用最右侧的“更多操作”菜单 “更多操作”图标。 删除这些副本。
  3. 如需打开实例的概览页面,请点击实例名称。
  4. 从 SQL 导航菜单中选择备份
  5. 找到要恢复的备份,然后选择恢复
  6. 使用备份恢复实例页面中,确认在查看备份详情中选择了正确的备份。
  7. 选择恢复目标位置中,选择覆盖现有实例
  8. 实例下拉菜单中,选择要用于恢复的实例。您选择的实例及其所有数据都会被覆盖。
  9. 要确认您的选择,请在目标实例 ID 字段中输入要覆盖的实例的名称。
  10. 如需开始恢复过程,请点击恢复
  11. 转到目标实例的操作标签页,检查恢复操作的状态。
  12. 恢复操作完成后,重新创建您之前删除的所有副本。

gcloud

  1. 描述目标实例,以查看它是否有任何副本:
    gcloud sql instances describe TARGET_INSTANCE_NAME

    请记下 replicaNames 中列出的任何实例。

  2. 删除所有副本:
    gcloud sql instances delete REPLICA_NAME

    对每个副本重复此操作。

  3. 列出源实例的备份:
    gcloud sql backups list \
    --instance SOURCE_INSTANCE_NAME
  4. 找到您要使用的备份,并记录它的 ID 值。
  5. 使用指定的备份恢复到目标实例:
    gcloud sql backups restore BACKUP_ID \
    --restore-instance=TARGET_INSTANCE_NAME \
    --backup-instance=SOURCE_INSTANCE_NAME
        
  6. 恢复完成后,重新创建您之前删除的所有副本。

REST v1

  1. 列出目标实例的所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=replicaNames

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  2. 删除所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • replica-id:副本 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-id

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    对每个副本重复此操作。

  3. 列出来源实例的备份,以获取您要使用的备份的 ID。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/backupRuns

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    -OR- 如果实例位于服务中断的区域,请列出项目中的所有备份:

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID,或 -(对于项目中所有备份的列表)

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/-/backupRuns

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    找到您需要恢复的实例的备份。
  4. 使用备份恢复目标实例。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • target-instance-id:目标实例 ID
    • source-instance-id:源实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/target-instance-id/restoreBackup

    请求 JSON 正文:

    {
      "restoreBackupContext":
      {
        "backupRunId": backup-id,
        "instanceId": "source-instance-id"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  5. 恢复操作完成后,重新创建您之前删除的所有副本。

REST v1beta4

  1. 列出目标实例的所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=replicaNames

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  2. 删除所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • replica-id:副本 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-id

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    对每个副本重复此操作。

  3. 列出来源实例的备份,以获取您要使用的备份的 ID。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/backupRuns

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  4. 使用备份恢复目标实例。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • target-instance-id:目标实例 ID
    • source-instance-id:源实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/target-instance-id/restoreBackup

    请求 JSON 正文:

    {
      "restoreBackupContext":
      {
        "backupRunId": backup-id,
        "instanceId": "source-instance-id"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  5. 恢复操作完成后,重新创建您之前删除的所有副本。

恢复到同一实例

当您将备份恢复到相同实例时,即是让该实例上的数据返回到进行备份时的状态。如需详细了解如何恢复实例,请参阅关于执行恢复操作的一般提示

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如果目标实例具有任何读取副本,请使用最右侧的“更多操作”菜单 “更多操作”图标。 删除这些副本。
  3. 如需打开实例的概览页面,请点击实例名称。
  4. 从 SQL 导航菜单中选择备份
  5. 找到要使用的备份,然后选择恢复
  6. 使用备份恢复实例页面中,确认在查看备份详情中选择了正确的备份。
  7. 选择恢复目标位置中,选择覆盖源实例

    检查括号中是否指定了源实例的名称。

  8. 要确认您的选择,请在目标实例 ID 字段中输入实例名称。
  9. 如需开始恢复过程,请点击恢复
  10. 转到实例的操作页面,检查恢复操作的状态。
  11. 恢复操作完成后,重新创建您在第一步中删除的所有副本。

gcloud

  1. 描述实例,以查看它是否有任何副本:
    gcloud sql instances describe INSTANCE_NAME

    请记下 replicaNames 中列出的任何实例。

  2. 删除所有副本:
    gcloud sql instances delete REPLICA_NAME

    对所有副本重复此操作。

  3. 列出实例的备份:
    gcloud sql backups list --instance INSTANCE_NAME
  4. 找到您要使用的备份,并记录它的 ID 值。
  5. 使用指定的备份恢复实例:
    gcloud sql backups restore BACKUP_ID \
    --restore-instance=INSTANCE_NAME
  6. 恢复操作完成后,重新创建您在第一步中删除的所有副本。

REST v1

  1. 列出实例的所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=replicaNames

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  2. 删除所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • replica-id:副本 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-id

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    对每个读取副本重复此操作。

  3. 列出实例的备份,以获取您要使用的备份的 ID。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/backupRuns

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  4. 使用备份恢复实例。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/restoreBackup

    请求 JSON 正文:

    {
      "restoreBackupContext":
      {
        "backupRunId": "backup-id",
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  5. 恢复操作完成后,重新创建您之前删除的所有副本。

REST v1beta4

  1. 列出实例的所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=replicaNames

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  2. 删除所有副本。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • replica-id:副本 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-id

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    对每个读取副本重复此操作。

  3. 列出实例的备份,以获取您要使用的备份的 ID。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/backupRuns

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  4. 使用备份恢复实例。

    在使用任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/restoreBackup

    请求 JSON 正文:

    {
      "restoreBackupContext":
      {
        "backupRunId": "backup-id",
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

  5. 恢复操作完成后,重新创建您之前删除的所有副本。

恢复到其他项目中的实例

您可以使用 project 参数将数据恢复到与最初用于创建备份的实例不属于同一项目的实例。使用 project 参数时,请在项目中以及对要将数据恢复到的实例调用 restoreBackup。当您使用备份恢复到不同实例时,会将目标实例上的数据更新为之前创建备份时源实例所处的状态。

权限

恢复到其他项目的用户必须具备目标项目的 cloudsql.instances.restoreBackup 权限和源实例的 cloudsql.backupRuns.get 权限。这些权限包含在 Cloud SQL Admin 角色中。

如需将数据恢复到其他项目中的实例,请按如下所述操作:

REST v1

如需获取 backupId,请运行以下命令。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/backupRuns

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

将备份恢复到其他项目中的实例:

在使用任何请求数据之前,请先进行以下替换:

  • source-project-id:源项目 ID
  • target-project-id:目标项目 ID
  • target-instance-id:目标实例 ID
  • source-instance-id:源实例 ID
  • backup-id:备份 ID

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/target-project-id/instances/target-instance-id/restoreBackup

请求 JSON 正文:

{
  "restoreBackupContext":
  {
    "backupRunId": backup-id,
    "project": "source-project-id",
    "instanceId": "source-instance-id"
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

如需详细了解 project 属性,请参阅 restoreBackup

REST v1beta4

如需获取 backupId,请运行以下命令。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/backupRuns

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

将备份恢复到其他项目中的实例:

在使用任何请求数据之前,请先进行以下替换:

  • source-project-id:源项目 ID
  • target-project-id:目标项目 ID
  • target-instance-id:目标实例 ID
  • source-instance-id:源实例 ID
  • backup-id:备份 ID

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/target-project-id/instances/target-instance-id/restoreBackup

请求 JSON 正文:

{
  "restoreBackupContext":
  {
    "backupRunId": backup-id,
    "project": "source-project-id",
    "instanceId": "source-instance-id"
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

如需详细了解 project 属性,请参阅 restoreBackup

执行时间点恢复

如需执行时间点恢复,请参阅时间点恢复

标识恢复时间点

在执行时间点恢复之前,必须已标识二进制日志文件名和时间点,该时间点与您要将实例恢复到的时间点相对应。

如需完成此任务,请参阅确定恢复位置

后续步骤