本页面介绍了如何保护 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 sql instances create [INSTANCE_NAME] \ --deletion-protection
如需在实例创建期间设置删除保护,请在 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 } }
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id /instances"
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances" | Select-Object -Expand Content
您应该收到类似以下内容的 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 " }
如需在实例创建期间设置删除保护,请在 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 } }
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1beta4/projects/project-id /instances"
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1beta4/projects/project-id /instances" | Select-Object -Expand Content
您应该收到类似以下内容的 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 sql instances patch [INSTANCE_NAME] \ --deletion-protection
如需在更新实例时停用删除保护,请使用如下所示的命令:
gcloud sql instances patch [INSTANCE_NAME] \ --no-deletion-protection
如需在更新实例时设置删除保护,请在 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 } }
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 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 " }
如需在更新实例时设置删除保护,请在 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 } }
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1beta4/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1beta4/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 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 " }