本页面介绍了如何保护 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" }