本页面介绍了自助维护,可让您在计划维护的常规流程之外接受实例的维护更新。
概览
Cloud SQL 会定期通过新的维护版本发布软件改进,例如已知漏洞的补丁。虽然 Cloud SQL 每隔几个月安排一次维护更新,以确保您拥有最新的维护版本,但在以下情况下,建议您使用自助维护:
- 您需要在下一次计划维护事件之前进行更新。
- 您想要在跳过最近的计划维护事件后使用最新的维护版本。
您无需手动更新到最新版本。您可以让 Cloud SQL 在下一个预定维护事件期间自动更新维护版本。
管理对主实例的所有读取副本的维护
对具有读取副本的主实例执行自助维护时,Cloud SQL 会自动对其所有读取副本应用维护更新。如果读取副本实例超过三个,则实例会分为多组,并且会并行更新。最后一步是对主实例应用维护更新。
如有必要,您仍可以对单个读取副本执行自助维护。不过,为了确保所有读取副本实例和主实例运行的是同一维护版本,我们建议您同时对主实例的所有读取副本执行自助维护。
如需更新单个读取副本实例,请在执行自助维护时指定该读取副本实例。
准备工作
在执行自助维护之前,请先检查当前维护版本。然后,您可以确定要更新到的目标维护版本,并将实例更新到该版本。如果您使用读取副本,请将主实例的所有读取副本更新到该版本。
如需查看实例的当前维护版本,请按照以下过程操作:
gcloud
在运行以下 gcloud
命令之前,请先进行以下替换:
- INSTANCE_ID:要查询的实例
gcloud sql instances describe INSTANCE_ID
maintenanceVersion
属性旁边指明了安装在实例上的维护版本。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }
在响应的 DatabaseInstance
部分中查找 maintenanceVersion
项。
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }
在响应的 DatabaseInstance
部分中查找 maintenanceVersion
项。
确定目标维护版本
使用以下方法可查看您可以选择作为目标的维护版本。您无法更新到早于当前维护版本的版本。
gcloud
在运行以下 gcloud
命令之前,请先进行以下替换:
- INSTANCE_ID:要查询的实例
gcloud sql instances describe INSTANCE_ID
availableMaintenanceVersions
属性旁边指明了可用的维护版本。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }
在响应的 DatabaseInstance
部分中查找 availableMaintenanceVersions
项。
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }
在响应的 DatabaseInstance
部分中查找 availableMaintenanceVersions
项。
将主实例的所有读取副本更新到目标维护版本
如需对主实例的所有读取副本实例执行维护更新,请按照以下过程操作。
gcloud
在使用以下 gcloud
命令之前,请先进行以下替换:
- PRIMARY_INSTANCE_ID:主实例的 ID
- MAINTENANCE_VERSION:要应用的 Cloud SQL 维护版本
gcloud sql instances patch PRIMARY_INSTANCE_ID \ --maintenance-version=MAINTENANCE_VERSION
在出现确认提示时,输入 Y
以继续,或输入 N
以取消。
如果您选择 Y
,则更新过程会先将指定的维护版本应用于所有读取副本,然后再更新主实例。系统会跳过任何已更新到目标维护版本的读取副本实例。
如果您选择 N
,则系统不会更新任何实例。
读取副本和主实例更新完成后,系统会显示如下所示的消息:
Patching Cloud SQL instance....done. Patching Cloud SQL instance....done. Patching Cloud SQL instance....done. Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_ID]
Terraform
如需创建实例,请使用 Terraform 资源。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
删除更改
如需删除更改,请执行以下操作:
- 如需停用删除防护,请在 Terraform 配置文件中将
deletion_protection
参数设置为false
。deletion_protection = "false"
- 运行以下命令并在提示符处输入
yes
,以应用更新后的 Terraform 配置:terraform apply
-
通过运行以下命令并在提示符处输入
yes
,移除之前使用 Terraform 配置应用的资源:terraform destroy
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- PROJECT_ID:主实例的 ID
- MAINTENANCE_VERSION:要应用的 Cloud SQL 软件维护版本
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "maintenanceVersion": "MAINTENANCE_VERSION" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "OPERATION_ID", "targetId": "PRIMARY_INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- INSTANCE_ID:主实例的 ID
- MAINTENANCE_VERSION:要应用的 Cloud SQL 软件维护版本
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "maintenanceVersion": "MAINTENANCE_VERSION" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
将单个实例更新到目标维护版本
如需对单个实例执行维护更新,请按照以下过程操作。如有必要,您可以按照此过程更新单个读取副本实例。
gcloud
在使用以下 gcloud
命令之前,请先进行以下替换:
- INSTANCE_ID:实例的 ID。此实例可以是读取副本实例。
- MAINTENANCE_VERSION:要应用的 Cloud SQL 维护版本
gcloud sql instances patch INSTANCE_ID \ --maintenance-version=MAINTENANCE_VERSION
如果您指定读取副本,则系统会显示确认提示。输入 Y
以继续,或输入 N
以取消。
- 如果您选择
Y
,则更新过程仅会将指定的维护版本应用于指定的读取副本。 - 如果您选择
N
,则系统不会更新任何实例。
实例更新完成后,系统会显示如下所示的消息:
Patching Cloud SQL instance....done. Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID]
Terraform
如需创建实例,请使用 Terraform 资源。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
删除更改
如需删除更改,请执行以下操作:
- 如需停用删除防护,请在 Terraform 配置文件中将
deletion_protection
参数设置为false
。deletion_protection = "false"
- 运行以下命令并在提示符处输入
yes
,以应用更新后的 Terraform 配置:terraform apply
-
通过运行以下命令并在提示符处输入
yes
,移除之前使用 Terraform 配置应用的资源:terraform destroy
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- PROJECT_ID:实例 ID,可以是读取副本实例
- MAINTENANCE_VERSION:要应用的 Cloud SQL 软件维护版本
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "maintenanceVersion": "MAINTENANCE_VERSION" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "OPERATION_ID", "targetId": "PRIMARY_INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- INSTANCE_ID:实例 ID,可以是读取副本实例
- MAINTENANCE_VERSION:要应用的 Cloud SQL 软件维护版本
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "maintenanceVersion": "MAINTENANCE_VERSION" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
问题排查
问题 | 问题排查 |
---|---|
无法对已停止的实例应用维护更新。 | 如需解决此问题,请在执行自助维护更新之前启动实例。 |
由于数据库主要版本不同,维护更新失败。 | 您无法使用自助维护升级实例的数据库主要版本。 如需升级实例的主要版本,请按照以下过程之一操作: |
后续步骤
- 查看实例操作日志。
- 阅读维护常见问题解答。
- 详细了解 Cloud SQL 中的复制。