防止删除实例

本页面介绍了如何保护 Cloud SQL 实例免遭意外删除。

概览

实例删除保护使您能够防止意外移除现有实例和新实例。通过实例删除保护,您可以保护对应用和服务至关重要的实例。

您可以在创建实例时设置删除保护选项。此外,您还可以为现有实例设置此选项。两者都是在实例级防止删除。默认情况下,除非您使用 Google Cloud 控制台或 Terraform 创建实例,否则删除保护选项处于停用状态。

克隆实例时,新实例会从源实例接收删除保护选项(已启用或已停用)。

规划删除保护

如果您打算创建实例,请决定是否要保护新实例免遭意外删除。例如,关键实例应该以这种方式保护。

此外,还应考虑是否要保护现有实例免遭意外删除。如果您要保护多个实例,请为每个实例设置此选项。

为读取副本考虑删除保护

创建读取副本时,该读取副本不会从主实例获取删除保护设置;此设置保持独立。但是,您可以为新的或现有的读取副本启用删除保护。

对于 Cloud SQL 读取副本,删除保护选项的工作原理与 Cloud SQL 实例相同。

确认必要的权限或角色

如需设置删除保护选项,Cloud SQL 实例的服务账号必须具有特定的权限或 IAM 角色

创建实例所需的权限或角色

与相关操作一样,需要具有 cloudsql.instances.create 权限或 cloudsql.admin 角色才能使用删除保护选项。因此,在创建实例时,无需额外的权限即可启用删除保护。

用于修改实例的权限或角色

与相关操作一样,需要具有 cloudsql.instances.update 权限或 cloudsql.editor 角色才能更改删除保护。因此,在修改实例以进行删除保护时,无需额外的权限。

规划实例删除

如果您打算删除实例,请先执行以下操作:

  • 确认可以安全地删除实例
  • 确认已停用删除保护;如有必要,请修改实例以停用删除保护

删除保护相关限制

对实例的删除保护不会阻止:

  • 停止实例
  • 重启实例
  • 修改实例
  • 删除备份
  • 因结算问题而暂停实例
  • 因结算问题而删除已暂停的实例
  • 因项目删除而删除实例

为新实例设置删除保护

以下是设置删除保护选项的方法。默认情况下,除非您使用 Google Cloud 控制台或 Terraform 创建实例,否则删除保护选项处于停用状态。

如果启用了删除保护,则尝试删除实例的操作会失败。

控制台

  1. 按照以下步骤开始创建实例
  2. 自定义实例下,点击显示配置选项下拉箭头。
  3. 数据保护下,确认已勾选启用删除保护复选框。
  4. 根据实例的需要,选择其他配置选项
  5. 点击创建实例

gcloud

如需在实例创建期间设置删除保护,请使用如下所示的命令:

gcloud sql instances create [INSTANCE_NAME] \
    --deletion-protection

REST v1

如需在实例创建期间设置删除保护,请在 deletionProtection 字段中指定 true

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID
  • database-version:数据库版本
  • region:所需区域
  • machine-type:所需的机器类型

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-24T15:34:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

如需在实例创建期间设置删除保护,请在 deletionProtection 字段中指定 true

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID
  • database-version:数据库版本
  • region:所需区域
  • machine-type:所需的机器类型

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-26T15:37:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
如需了解如何为此任务构造底层 REST API 请求,请参阅 instances:post 页面上的 API Explorer

在现有实例上设置或移除删除保护

以下是修改实例以进行删除保护的方法。如果启用了该选项,则后续尝试删除实例的操作会失败。

控制台

  1. 按照以下步骤开始修改实例
  2. 点击修改后,找到自定义实例部分。
  3. 数据保护下,勾选或取消选中启用删除保护复选框。
  4. 根据实例的需要,修改其他配置选项
  5. 点击保存

gcloud

如需在更新实例时启用删除保护,请使用如下所示的命令:

gcloud sql instances patch [INSTANCE_NAME] \
    --deletion-protection

如需在更新实例时停用删除保护,请使用如下所示的命令:

gcloud sql instances patch [INSTANCE_NAME] \
    --no-deletion-protection

REST v1

如需在更新实例时设置删除保护,请在 deletionProtection 字段中指定 true。如需移除删除保护,请在该字段中指定 false

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:42:12.281Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

如需在更新实例时设置删除保护,请在 deletionProtection 字段中指定 true。如需移除删除保护,请在该字段中指定 false

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
如需了解如何为此任务构建底层 REST API 请求,请参阅 instances:patch 页面上的 API Explorer