維護自助式服務

本頁說明自助式維護功能,可讓您在例行維護作業的正常流程之外,接受執行個體的維護更新。

總覽

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": "POSTGRES_13"
}

在回應的 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": "POSTGRES_13"
}

在回應的 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": "POSTGRES_13"
}

在回應的 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": "POSTGRES_13"
}

在回應的 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 資源

resource "google_sql_database_instance" "postgres_ssm_instance_name" {
  name                = "postgres-ssm-instance-name"
  region              = "asia-northeast1"
  database_version    = "POSTGRES_14"
  maintenance_version = "POSTGRES_14_4.R20220710.01_07"
  settings {
    tier = "db-f1-micro"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,即可套用更新的 Terraform 設定:
    terraform apply
  1. 如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入 yes

    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": "[email protected]",
  "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": "[email protected]",
  "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 資源

resource "google_sql_database_instance" "postgres_ssm_instance_name" {
  name                = "postgres-ssm-instance-name"
  region              = "asia-northeast1"
  database_version    = "POSTGRES_14"
  maintenance_version = "POSTGRES_14_4.R20220710.01_07"
  settings {
    tier = "db-f1-micro"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,即可套用更新的 Terraform 設定:
    terraform apply
  1. 如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入 yes

    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": "[email protected]",
  "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": "[email protected]",
  "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"
}

疑難排解

問題 疑難排解
無法將維護更新套用至已停止的執行個體。 如要解決這個問題,請先啟動執行個體,再執行自助式維護更新。
維護更新失敗,因為資料庫主要版本不同。

您無法使用自助維護功能升級執行個體的資料庫主要版本。

如要升級執行個體的主要版本,請使用下列任一程序:

後續步驟