本页面介绍了如何保护 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 创建实例,否则防删除保护选项处于停用状态。
如果启用了防删除保护,则尝试删除实例的操作会失败。
控制台
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"
}
在现有实例上设置或移除防删除保护
以下是修改实例以进行防删除保护的方法。如果启用了该选项,则后续尝试删除实例的操作会失败。
控制台
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"
}