維護自助式服務

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

總覽

Cloud SQL 會定期發布軟體改良項目,例如透過新的維護版本修補已知安全漏洞。Cloud SQL 每隔幾個月會排定一次維護更新,確保您使用最新維護版本。在下列情況下,您可能需要使用自助式維護功能:

  • 您需要在下次排定的維護時段前先執行更新。
  • 您錯過最近一次排定的維護事件,因此想趕上最新的維護版本。

您不必手動更新至最新版本。您可以讓 Cloud SQL 在下次排定的維護事件期間,自動更新維護版本。

管理主要執行個體所有唯讀備用資源的維護作業

對有唯讀副本的主要執行個體執行自助式維護時,Cloud SQL 會自動將維護更新套用至所有唯讀副本。如果讀取副本執行個體超過三個,系統會將執行個體分成多個群組,並同時更新。最後一個步驟是將維護更新套用至主要執行個體。

如有需要,您仍可對單一唯讀副本執行自助維護作業。不過,為確保所有唯讀副本執行個體和主要執行個體都使用相同的維護版本,建議您同時對主要執行個體的所有唯讀副本執行自助式維護作業。

如要更新單一唯讀備用資源執行個體,請執行自助式維護作業時指定該執行個體。

事前準備

執行自助式維護作業前,請先檢查目前的維護版本。接著,您可以決定要更新的目標維護版本,然後將執行個體更新至該版本。如果您使用唯讀備用資源,請 將主要執行個體的所有唯讀備用資源更新至該版本

如要查看執行個體的目前維護版本,請按照下列程序操作:

gcloud

執行下列 gcloud 指令前,請先進行下列替換作業:

  • INSTANCE_ID:要查詢的執行個體
gcloud sql instances describe INSTANCE_ID
  

執行個體上安裝的維護版本會顯示在 maintenanceVersion 屬性旁。

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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. 執行下列指令,並在提示中輸入 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 資源

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. 執行下列指令,並在提示中輸入 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"
}

疑難排解

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

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

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

後續步驟