就地升級資料庫主要版本

本頁說明如何升級 Cloud SQL 執行個體,藉此升級資料庫主要版本,而非遷移資料

簡介

資料庫軟體供應商會定期發布新的主要版本,其中包含新功能、效能改善項目和安全性強化功能。Cloud SQL 會在新版本發布後採用。Cloud SQL 支援新的主要版本後,您就可以升級執行個體,確保資料庫維持在最新狀態。

您可以就地升級執行個體的資料庫版本,也可以遷移資料。就地升級是升級執行個體主要版本的簡便方式。您不需要遷移資料或變更應用程式連線字串。透過就地升級,您可以在升級後保留目前執行個體的名稱、IP 位址和其他設定。就地升級不需要移動資料檔案,而且速度更快。在某些情況下,停機時間會比資料遷移作業所需的時間短。

如果是 MySQL 8.0.15 之前的版本,MySQL 就地升級作業會使用 mysql_upgrade 公用程式。如果是 MySQL 8.0.16 以上版本,MySQL 就地升級作業會由 MySQL server 程序處理。如要進一步瞭解就地升級作業,請參閱「MySQL 升級程序升級的項目」一文。

規劃主要版本升級作業

  1. 確認您具備執行主要版本升級所需的角色:「Cloud SQL 擁有者」或「Cloud SQL 管理員」
  2. 選擇目標主要版本。

    gcloud

    如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」。

    如要查看執行個體可進行就地升級的資料庫版本,請按照下列步驟操作:

    1. 執行下列指令。
    2. gcloud sql instances describe INSTANCE_NAME
         

      INSTANCE_NAME 替換為執行個體的名稱。

    3. 在指令輸出內容中,找出標示為 upgradableDatabaseVersions 的區段。
    4. 每個子區段都會傳回可升級的資料庫版本。在每個子章節中,查看下列欄位。
      • majorVersion:可供您進行就地升級的主要版本。
      • name:資料庫版本字串,包含主要版本。如果是 MySQL 適用的 Cloud SQL,這個欄位也會包含資料庫的子版本。
      • displayName:資料庫版本的顯示名稱。

    REST v1

    如要檢查可進行主要版本就地升級的目標資料庫版本,請使用 Cloud SQL Admin API 的 instances.get 方法。

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

    • INSTANCE_NAME:執行個體名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "MYSQL_8_0"
      name: "MYSQL_8_0_36"
      display_name: "MySQL 8.0.36"
    }
    
    

    REST v1beta4

    如要檢查執行個體的主要版本就地升級作業有哪些可用的目標資料庫版本,請使用 Cloud SQL Admin API 的 instances.get 方法。

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

    • INSTANCE_NAME:執行個體名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "MYSQL_8_0"
      name: "MYSQL_8_0_36"
      display_name: "MySQL 8.0.36"
    }
    
    

    如需 Cloud SQL 支援的資料庫版本完整清單,請參閱資料庫版本和版本政策

  3. 請考量每個資料庫主要版本提供的功能,並解決不相容問題。

    新的主要版本會導入不相容的變更,可能需要您修改應用程式程式碼、結構定義或資料庫設定。升級資料庫執行個體前,請先詳閱目標主要版本的版本資訊,找出必須解決的不相容問題。

    升級至較新版本後,部分系統變數的預設值可能會變更。舉例來說,MySQL 5.6 和 MySQL 5.7 中的 character_set_server 預設值為 utf8。升級至 MySQL 8.0 時,character_set_server 的預設值會變更為 utf8mb4。如要還原為 utf8,您必須手動將資料庫旗標值變更為舊值。詳情請參閱「設定資料庫標記」。大部分的預設值變更都是由 MySQL Community 完成 (詳情請參閱「升級伺服器預設值」)。

  4. 執行升級前檢查。

    • 如果從 MySQL 5.7 升級至 8.0,請先執行從 MySQL 5.7 升級至 8.0 的前置檢查。您可以在 MySQL 殼層中使用升級檢查公用程式
    • 如果從 MySQL 8.0 升級至 8.4,請先執行從 MySQL 8.0 升級至 8.4 的前置檢查。您可以在 MySQL 殼層中使用升級檢查公用程式

      如果在前置檢查期間發現任何問題,請先修正問題再進行升級。Cloud SQL 不支援在主要版本升級期間進行預先檢查。如果執行個體無法通過前置檢查,升級作業也可能會失敗。

  5. 檢查磁碟空間和執行個體機器類型。

    升級主要版本需要額外資源 (例如磁碟空間),才能儲存升級後的資料表。如果磁碟空間不足,升級作業就會失敗並回溯。如要從 MySQL 5.7 升級至 8.0,需要額外記憶體才能將舊中繼資料轉換為新資料字典。執行主要版本升級前,請確保每個資料表都有超過 100 KB 的記憶體。您可以變更機器類型,暫時增加記憶體。

  6. 如要從 MySQL 5.7 升級至 MySQL 8.0,請檢查 MySQL 8.0 的使用者授權變更

    MySQL 8.0 適用的 Cloud SQL 使用名為 partial_revokes 的旗標,預設設為 ON。與 MySQL 5.7 不同,這個旗標會移除在資料庫 GRANT 指令中使用萬用字元的功能。為確保資料庫使用者能存取正確的資料庫結構定義,請先修改資料庫使用者權限,再升級至 MySQL 8.0。更新使用者權限,改用必要資料庫結構定義的完整名稱,而非萬用字元。

    如要進一步瞭解這個標記在 MySQL 8.0 中的運作方式,請參閱 MySQL 8.0 中的 partial_revokes

  7. 以模擬測試升級。

    在升級正式版資料庫之前,請先在測試環境中進行端對端升級程序試執行。您可以複製執行個體,建立資料的相同副本,並測試升級程序。

    除了驗證升級是否成功完成,也請執行測試,確保應用程式在升級後的資料庫上運作正常。

  8. 決定升級時間。

    升級時,執行個體會有一段時間無法使用。請規劃在資料庫活動較少的時段升級。

為主要版本升級做好準備

升級前,請先完成下列步驟:

  1. 僅限從 MySQL 5.7 升級至 8.0:檢查並修正預檢程序中發現的不相容問題。常見問題包括:

    1. 在預存程序、觸發程序和其他資料庫物件中,新增 RANKSGROUPSFUNCTION 等保留字。詳情請參閱「關鍵字和保留字」。
    2. 資料表定義中含有無效的 UTF 字元。
    3. 必須使用 XA COMMIT 陳述式提交,或使用 XA ROLLBACK 陳述式回溯的未提交 XA 交易。
    4. 名稱超過 64 個字元的外鍵限制。
    5. 資料欄混合索引中的空間資料類型。詳情請參閱空間資料類型

    如需在預先檢查期間排解錯誤和已知問題,請參閱「就地升級至 MySQL 8.0 的已知問題」。如要進一步瞭解常見的 MySQL 問題,請參閱「為升級作業準備安裝環境」和「要升級至 MySQL 8.0 嗎?」。

    僅限從 MySQL 8.0 升級至 MySQL 8.4:檢查並修正預先檢查程序中發現的不相容問題。常見問題包括:

    • 複製作業術語過時。MySQL 8.4 完全移除了 MASTERSLAVE 這些字詞。 如果您仍使用含有這些字詞的指令或設定,請務必替換或移除這些字詞。如要進一步瞭解這些字詞的移除和取代情形,請參閱「MySQL 8.4 相較於 MySQL 8.0 的新功能」。
    • 更新現有使用者帳戶的驗證外掛程式,改用 caching_sha2_password 驗證外掛程式,而非已淘汰的 mysql_native_password 外掛程式。

      如要將現有的資料庫使用者帳戶變更為使用 caching_sha2_password 驗證外掛程式,請使用下列指令:
           ALTER USER 'username'@'%'
           IDENTIFIED WITH caching_sha2_password BY 'user_password';
           
      usernameuser_password 替換為要更新的使用者帳戶值。
  2. 檢查磁碟空間和執行個體機器類型

    升級主要版本時,需要額外的磁碟空間和記憶體,才能儲存升級後的資料表和新的資料字典。如果磁碟空間不足,升級就會失敗,並還原為原始版本。Cloud SQL 建議每個資料表至少要有 100 KB 的記憶體。

    注意:您可以在執行主要版本升級前,變更機器類型來暫時增加記憶體。詳情請參閱變更機器類型

執行主要版本升級

您可以升級單一 Cloud SQL 執行個體的主要版本,也可以升級主要執行個體的主要版本,並將所有備用資源 (包括連鎖備用資源和跨區域備用資源) 納入升級範圍。

升級單一執行個體的主要版本

當您為單一執行個體啟動升級作業時,Cloud SQL 會執行下列動作:

  1. 檢查執行個體設定,確保執行個體與升級作業相容。
  2. Cloud SQL 驗證設定後,執行個體就會無法使用。
  3. 建立升級前備份。
  4. 在執行個體上執行升級。
  5. 讓執行個體可供使用。
  6. 建立升級後備份。
升級至 MySQL 8.0 時,Cloud SQL 會自動在預設子版本上佈建執行個體。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「執行個體資訊」部分,按一下「升級」按鈕,然後確認要前往升級頁面。
  5. 在「選擇資料庫版本」頁面中,按一下「要升級的資料庫版本」清單,然後選取可用的資料庫主要版本。
  6. 按一下「繼續」
  7. 在「Instance ID」(執行個體 ID) 方塊中輸入執行個體名稱,然後按一下「Start upgrade」(開始升級) 按鈕。
這項作業需要幾分鐘才能完成。

確認執行個體「總覽」頁面上的執行個體名稱下方,顯示升級後的資料庫主要版本。

gcloud

  1. 開始升級。

    使用 gcloud sql instances patch 指令並加上 --database-version 旗標。

    執行指令前,請先取代下列項目:

    • INSTANCE_NAME:執行個體的名稱。
    • DATABASE_VERSION:資料庫主要版本的列舉,必須晚於目前版本。為可做為執行個體升級目標的主要版本指定資料庫版本。 您可以取得這個列舉,做為「規劃升級」的第一步。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseEnums
    gcloud sql instances patch INSTANCE_NAME \
    --database-version=DATABASE_VERSION

    主要版本升級需要幾分鐘才能完成。系統可能會顯示訊息,指出作業時間超出預期。您可以忽略這則訊息,也可以執行 gcloud sql operations wait 指令來關閉訊息。

  2. 取得升級作業名稱。

    使用 gcloud sql operations list 指令並加上 --instance 旗標。

    執行指令前,請將 INSTANCE_NAME 變數替換為執行個體名稱。

    gcloud sql operations list --instance=INSTANCE_NAME
  3. 監控升級狀態。

    使用 gcloud sql operations describe 指令。

    執行指令前,請將 OPERATION 變數替換為上個步驟中擷取的升級作業名稱。

    gcloud sql operations describe OPERATION

REST v1

  1. 開始直接升級。

    使用 PATCH 要求和 instances:patch 方法。

    使用任何要求資料之前,請先替換下列變數:

    • PROJECT_ID:專案 ID。
    • INSTANCE_NAME:執行個體的名稱。

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 要求內文:

    {
      "databaseVersion": DATABASE_VERSION
    }

    DATABASE_VERSION 替換為資料庫主要版本的列舉,且必須是比目前版本更新的版本。為可做為執行個體升級目標的主要版本指定資料庫版本。 您可以取得這個列舉,做為「規劃升級」的第一步。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseVersion

  2. 取得升級作業名稱。

    使用 GET 要求和 operations.list 方法,並將 PROJECT_ID 替換為專案 ID。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
  3. 監控升級狀態。

    使用 GET 要求搭配 operations.get 方法,並替換下列變數:

    • PROJECT_ID:專案 ID。
    • OPERATION_NAME:在上一個步驟中擷取的升級作業名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operation/OPERATION_NAME

Terraform

如要更新資料庫版本,請使用 Terraform 資源和適用於 Google Cloud的 Terraform 供應商,版本為 4.34.0 以上

resource "google_sql_database_instance" "instance" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-n1-standard-2"
  }
  # 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

提出就地升級要求後,Cloud SQL 會先執行升級前檢查。如果 Cloud SQL 判斷執行個體尚未準備好升級,升級要求就會失敗,並顯示訊息,建議您如何解決問題。另請參閱排解主要版本升級問題

在主要版本升級中加入副本

如果主要執行個體有副本,您可以將所有副本納入升級作業。Cloud SQL 可以升級主要執行個體的所有備用資源,包括跨區域備用資源和串聯式備用資源。

在主要版本升級時納入備用資源,Cloud SQL 會執行下列動作:

  1. 檢查主要執行個體和副本的設定,確保執行個體和副本可升級。
  2. 導致主要執行個體無法使用。
  3. 建立主要執行個體的升級前備份。
  4. 停止所有副本的複製作業。
  5. 對主要執行個體執行升級作業。
  6. 如果主要執行個體升級成功,主要執行個體就會再次可用,並重新啟動複製作業。
  7. Cloud SQL 會在升級後備份主要執行個體。
  8. Cloud SQL 會繼續升級所有備用資源。

即使備用資源的主要版本升級失敗,主要執行個體仍可繼續使用。

如要在主要版本升級中納入副本,請勿使用Google Cloud 控制台或 Terraform。只能使用 gcloud CLI 或 Cloud SQL Admin API。

gcloud

  1. 開始升級。

    使用 gcloud sql instances patch 指令,並加上 --database-version--include-replicas-for-major-version-upgrade 旗標。

    執行指令前,請先取代下列項目:

    • INSTANCE_NAME:主要執行個體的名稱。
    • DATABASE_VERSION:資料庫主要版本的列舉,必須晚於目前版本。為可做為執行個體升級目標的主要版本指定資料庫版本。 您可以取得這個列舉,做為「規劃升級」的第一步。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseEnums
    gcloud sql instances patch INSTANCE_NAME \
      --database-version=DATABASE_VERSION \
      --include-replicas-for-major-version-upgrade

    主要版本升級需要幾分鐘才能完成。系統可能會顯示訊息,指出作業時間超出預期。您可以忽略這則訊息,也可以執行 gcloud sql operations wait 指令來關閉訊息。升級副本可能需要幾分鐘才能完成。如要查看升級狀態,請按照下列步驟操作:

  2. 取得升級作業名稱。

    使用 gcloud sql operations list 指令並加上 --instance 旗標。

    執行指令前,請將 INSTANCE_NAME 變數替換為執行個體名稱。

    gcloud sql operations list --instance=INSTANCE_NAME
  3. 監控升級狀態。

    使用 gcloud sql operations describe 指令。

    執行指令前,請將 OPERATION 變數替換為上個步驟中擷取的升級作業名稱。

    gcloud sql operations describe OPERATION

REST

  1. 開始直接升級。

    使用 PATCH 要求和 instances:patch 方法。

    使用任何要求資料之前,請先替換下列變數:

    • PROJECT_ID:專案 ID。
    • INSTANCE_NAME:執行個體的名稱。

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 要求內文:

    {
      "databaseVersion": DATABASE_VERSION
      "includeReplicasForMajorVersionUpgrade": true
    }

    • DATABASE_VERSION 替換為資料庫主要版本的列舉,且必須是比目前版本更新的版本。為可做為執行個體升級目標的主要版本指定資料庫版本。 您可以取得這個列舉,做為「規劃升級」的第一步。 如需資料庫版本列舉的完整清單,請參閱 SqlDatabaseVersion
    • includeReplicasForMajorVersionUpgrade 欄位中,指定 true

  2. 取得升級作業名稱。

    使用 GET 要求和 operations.list 方法,並將 PROJECT_ID 替換為專案 ID。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
  3. 監控升級狀態。

    使用 GET 要求搭配 operations.get 方法,並替換下列變數:

    • PROJECT_ID:專案 ID。
    • OPERATION_NAME:在上一個步驟中擷取的升級作業名稱。

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operation/OPERATION_NAME

自動升級備份

執行主要版本升級時,Cloud SQL 會自動建立兩個隨選備份 (稱為升級備份):

  • 第一次升級備份是升級前備份,會在開始升級前立即進行。您可以使用這項備份資料,將資料庫執行個體還原至先前的版本狀態。
  • 第二個升級備份是升級後備份,升級後的資料庫執行個體允許寫入新資料後,系統就會立即建立這個備份。

查看備份清單時,升級備份會列出類型 On-demand。升級備份會加上標籤,方便您快速識別。 舉例來說,如果您從 MySQL 5.7 升級至 MySQL 8.0,升級前的備份會標示為 Pre-upgrade backup, MYSQL_5_7 to MYSQL_8_0.,升級後的備份則會標示為 Post-upgrade backup, MYSQL_8_0 from MYSQL_5_7.。如果您從 MySQL 8.0 升級至 MySQL 8.4,升級前的備份會標示為 Pre-upgrade backup, MYSQL_8_0 to MYSQL_8_4.,升級後的備份則會標示為 Post-upgrade backup, MYSQL_8_4 from MYSQL_8_0.

與其他隨選備份一樣,升級備份會一直保留在伺服器上,直到您刪除備份或執行個體為止。如果已啟用 PITR,升級備份檔在保留期限內就無法刪除。如要刪除升級備份,請停用 PITR,或等到升級備份不在保留期限內。

完成主要版本升級

升級主要執行個體後,請完成下列步驟,完成升級程序:

  1. 執行驗收測試。

    執行測試,確認升級後的系統運作正常。

  2. 選用:更新使用者權限。

    如果您已升級至 MySQL 8.0,請注意 MySQL 已變更安全性和帳戶管理系統。詳情請參閱「MySQL 8.0 新功能」。

    因此,在執行個體的 MySQL 5.7 版中建立的使用者,可能不具備與直接在 MySQL 8.0 中建立的使用者相同的權限。舉例來說,如果使用者從 MySQL 5.7 升級,可能沒有 CREATE ROLEDROP ROLE 權限,因為 MySQL 5.7 沒有這些權限。Cloud SQL 建議您在升級版本後重設使用者權限,修正與使用者權限相關的問題。

    如果您已從 MySQL 8.0 升級至 MySQL 8.4,使用者權限還會發生其他變更,包括新增 MySQL 8.4 推出的權限,以及移除 MySQL 8.0 的權限。詳情請參閱 MySQL 8.4 使用者權限 (cloudsqlsuperuser)

    如要在 MySQL 8.0 或 MySQL 8.4 中更新使用者權限,請按照下列步驟操作:

    1. 建立使用者,並授予 cloudsqlsuperuser 角色。

    2. 使用建立的使用者,透過下列指令撤銷升級使用者先前擁有的所有權限:

      REVOKE ALL PRIVILEGES ON *.* FROM user@host
    3. 將預期權限授予升級後的使用者。
  3. 選用:建立備份。

    雖然 Cloud SQL 會在您升級主要執行個體後自動建立備份,但 Cloud SQL 建議您自行建立備份,以便在必要時還原資料庫。

  4. 選用:如果您已升級至 Cloud SQL for MySQL 8.4,請將所有連接器、用戶端和 MySQL Shell 也更新至 MySQL 8.4。

排解主要版本升級問題

如果您嘗試執行無效的升級指令 (例如執行個體包含新版本的無效資料庫標記),Cloud SQL 會傳回錯誤訊息。

如果升級要求失敗,請檢查升級要求的語法。如果要求結構有效,請嘗試下列建議。

查看錯誤記錄

如果有效升級要求發生任何問題,Cloud SQL 會將錯誤記錄發布至 projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fmysql.err。每筆記錄項目都包含執行個體 ID 的標籤,有助於找出升級錯誤的執行個體。找出並解決這類升級錯誤。

如要查看錯誤記錄,請使用 Google Cloud控制台:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在執行個體「總覽」頁面的「作業和記錄」窗格中,按一下「查看 MySQL 錯誤記錄」連結。

    「Logs Explorer」(記錄檔探索工具) 頁面隨即開啟。

  4. 查看記錄的方式如下:

    • 如要列出專案中的所有錯誤記錄,請在「記錄名稱」記錄篩選器中選取記錄名稱。

    如要進一步瞭解查詢篩選器,請參閱「進階查詢」。

    • 如要篩選單一執行個體的升級錯誤記錄,請在「搜尋所有欄位」方塊中輸入下列查詢,並將 DATABASE_ID

    專案 ID 後方接著執行個體名稱,格式如下: project_id:instance_name

    resource.type="cloudsql_database"
    resource.labels.database_id="DATABASE_ID"
    logName : "projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fmysql.err"

    舉例來說,如要依專案 buylots 中名為 shopping-db 的執行個體,篩選升級錯誤記錄,請使用下列查詢篩選器:

     resource.type="cloudsql_database"
     resource.labels.database_id="buylots:shopping-db"
     logName : "projects/buylots/logs/cloudsql.googleapis.com%2Fmysql.err"

    您可以查看特定時間範圍內回報的所有記錄,也可以依嚴重程度篩選記錄。常見的疑難排解選項包括選取下列篩選條件:

    • 緊急
    • 快訊
    • 重大
    • 錯誤

    從 MySQL 5.7 版升級至 8.0 版時,您可能會遇到一些已知問題。如需排解這些問題的說明,請參閱「就地升級至 MySQL 8.0 的已知問題」。

將主要執行個體還原至先前的主要版本

如果升級後的資料庫系統運作不如預期,您可能需要將主要執行個體還原為先前版本。方法是將升級前的備份還原至 Cloud SQL 復原執行個體,也就是執行升級前版本的全新執行個體。

如要將主要執行個體還原至先前版本,請按照下列步驟操作:

  1. 找出升級前的備份。

    請參閱「自動升級備份」。

  2. 建立復原執行個體。

    建立新的 Cloud SQL 執行個體,並使用 Cloud SQL 在建立升級前備份時執行的主要版本。設定與原始執行個體相同的旗標執行個體設定

  3. 還原升級前的備份。

    還原升級前的備份資料至復原執行個體。這項作業可能需要幾分鐘才能完成。

  4. 新增唯讀備用資源。

    如果您使用唯讀備用資源,請個別新增。

  5. 連結應用程式。

    資料庫系統復原後,請更新應用程式,提供復原執行個體及其唯讀副本的詳細資料。您可以繼續在升級前的資料庫版本上放送流量。

限制

本節列出就地升級主要版本的限制。

  • 您無法在外部副本上就地升級主要版本。
  • 如果執行個體有超過 512,000 個資料表,從 MySQL 5.7 升級至 8.0 可能需要很長時間,甚至會逾時。
  • 如果執行個體有超過 512,000 個資料表,從 MySQL 8.0 升級至 8.4 可能需要很長時間,甚至會逾時。
  • 從 MySQL 8.0 升級至 8.4 時,如果您已將副本升級至 MySQL 8.4,但主要執行個體尚未升級,則可能在未升級的主要執行個體上,使用已淘汰的 mysql_native_password 驗證外掛程式建立新的使用者帳戶。為避免這種情況,請務必在升級副本後立即升級主要執行個體,或只在主要執行個體上使用下列指令建立新的使用者帳戶。

    CREATE USER 'USERNAME'@'%' IDENTIFIED WITH caching_sha2_password BY 'PASSWORD';

    USERNAMEPASSWORD 替換為適當值。

常見問題

升級資料庫主要版本時,可能會遇到下列問題。

升級期間是否無法使用執行個體?
可以。在 Cloud SQL 執行升級作業期間,執行個體會暫時無法使用。
升級需要多久時間?

升級單一執行個體通常不到 10 分鐘。 如果執行個體設定的 vCPU 或記憶體數量較少,升級作業可能需要較長時間。

如果執行個體代管的資料庫或資料表過多,或是資料庫非常龐大,升級作業可能需要數小時,甚至會逾時,因為升級總時間取決於資料庫中的物件數量。如果有多個執行個體需要升級,升級時間會成比例增加。 如果升級作業包含備用資源,則升級作業最多可能需要一小時才能完成,具體時間取決於主要執行個體擁有的備用資源數量。

我可以監控升級過程中的每個步驟嗎?
Cloud SQL 可讓您監控升級作業是否仍在進行中,但無法追蹤每次升級的個別步驟。
升級作業開始後,可以取消嗎?
很抱歉,升級作業開始後就無法取消。如果升級失敗,Cloud SQL 會自動將執行個體還原至先前的版本。
升級期間,我的設定會受到什麼影響?

執行就地主要版本升級時,Cloud SQL 會保留資料庫設定,包括執行個體名稱、IP 位址、明確設定的旗標值和使用者資料。不過,系統變數的預設值可能會變更。舉例來說,MySQL 5.7 中 character_set_server 標記的預設值為 utf8。升級至 MySQL 8.0 時,旗標的預設值會變更為 utf8mb4。如要還原為 utf8,請將旗標值設回先前的值。

詳情請參閱「設定資料庫標記」。如果目標版本不再支援特定旗標或值,Cloud SQL 會在升級期間自動移除該旗標。

升級副本後,如果複製作業中斷,該怎麼辦?

如果升級備用資源後複製作業中斷,Cloud SQL 會將備用資源還原至主要執行個體的 MySQL 主要版本。您可以再次升級副本,但如果問題持續發生,複製作業可能會再次中斷。因此,建議您在執行主要版本升級時一併升級副本,而不是分別升級每個副本。

如果備用資源未回溯至與主要執行個體相同的主要版本,則有兩種做法:

  1. 刪除損壞的副本、建立新副本,然後升級新副本。

    如果升級再次失敗,可能是因為升級主要執行個體時新增了不相容的變更。排解升級問題,找出問題所在、修正主要執行個體,然後嘗試升級副本。詳情請參閱疑難排解

  2. 升級主要執行個體

    如果副本執行緒無法運作,主要執行個體的升級作業就會重新建立副本。

為什麼升級後的副本會復原為先前的重大版本?

如果升級失敗,備用資源會還原為主要執行個體的版本。您可以再次升級副本,但如果問題仍未解決,可以檢查副本上的 mysql.err 記錄檔,找出來源。搜尋 [REPL]... failed executing transaction.... end_log_pos...; Failure Reason 等關鍵字。

如果錯誤訊息包含 Access denied for AuthId.... 和使用者權限變更,可能是因為在 mysql 和 sys 結構定義上,使用 MySQL 5.7 使用者權限執行查詢,而 MySQL 8.0 的安全性與帳戶管理系統有所變更,因此查詢可能會失敗。如要解決這個問題,請先停止主要執行個體上的查詢,再將主要執行個體升級至新版本,然後重試升級副本。Cloud SQL 建議您在升級至新版本前,暫時停止主要執行個體中的所有這類查詢,因為這可能會導致類似問題。

如果 MySQL 記錄中未顯示失敗原因 (例如 Access denied for AuthID....),則問題可能是因為升級備用執行個體後,主要執行個體新增了不相容的資料。如要瞭解如何修正不相容問題,請參閱「準備升級至主要版本」,然後再試一次。

後續步驟