本頁面說明如何升級資料庫主要版本,方法是升級 Cloud SQL 執行個體,而不是遷移資料。
簡介
資料庫軟體供應商會定期發布新的主要版本,其中包含新功能、效能改善和安全性強化功能。Cloud SQL 會在新版本推出後導入。Cloud SQL 支援新的主要版本後,您就可以升級執行個體,確保資料庫保持更新狀態。
您可以原地升級執行個體的資料庫版本,也可以遷移資料。原地升級是升級執行個體主要版本的簡單方式。您不必遷移資料或變更應用程式連線字串。升級後,您可以保留目前執行個體的名稱、IP 位址和其他設定。原地升級不需要移動資料檔案,而且可以更快完成。在某些情況下,停機時間會比遷移資料所需的時間短。
針對 MySQL 8.0.15 以下版本,MySQL 原地升級作業會使用mysql_upgrade
公用程式。針對 MySQL 8.0.16 以上版本,MySQL 原地升級作業會由 MySQL server
程序處理。如要進一步瞭解原地升級作業,請參閱「MySQL 升級程序升級的內容」。規劃主要版本升級作業
- 確認您具備執行主要版本升級所需的角色:Cloud SQL 擁有者或 Cloud SQL 管理員。
選擇目標主要版本。
gcloud
如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」一文。
如要查看可在執行個體上進行原地升級的資料庫版本,請按照下列步驟操作:
- 執行下列指令。
- 在指令輸出內容中,找出標示為
upgradableDatabaseVersions
的區段。 - 每個子區段都會傳回可供升級的資料庫版本。在每個子區段中,請檢查下列欄位。
majorVersion
:可針對原地升級指定的主要版本。name
:包含主要版本的資料庫版本字串。對於 MySQL 適用的 Cloud SQL,這個欄位還會包含資料庫的次版本。displayName
:資料庫版本的顯示名稱。
gcloud sql instances describe INSTANCE_NAME
將 INSTANCE_NAME 替換為執行個體名稱。
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 支援的完整資料庫版本清單,請參閱「資料庫版本和版本政策」。
請考量各個資料庫主要版本提供的功能,並解決不相容的問題。
新的主要版本會引入不相容的變更,可能需要您修改應用程式程式碼、結構定義或資料庫設定。升級資料庫執行個體前,請先查看目標主要版本的版本資訊,判斷您必須解決哪些不相容性問題。
升級至較新版本後,部分系統變數的預設值可能會變更。舉例來說,MySQL 5.6 和 MySQL 5.7 中
character_set_server
的預設值為utf8
。升級至 MySQL 8.0 後,character_set_server
的預設值會變更為utf8mb4
。如要還原為utf8
,您必須手動將資料庫旗標值變更為舊值。詳情請參閱「設定資料庫標記」。大部分的預設值變更是由 MySQL Community 完成 (詳情請參閱「升級伺服器預設值」)。如果您要從 MySQL 8.0 升級至 8.4,則必須先將執行個體升級至 MySQL 8.0.37 以上版本,才能升級至 MySQL 8.4。如要執行次要版本升級作業,請參閱「升級資料庫次要版本」。
執行升級預先檢查。
檢查磁碟空間和執行個體機器類型。
主要版本升級需要額外的資源 (例如磁碟空間) 來儲存已升級的資料表。如果磁碟空間不足,升級作業就會失敗並回溯。如果要從 MySQL 5.7 升級至 8.0,則需要額外的記憶體,才能將舊版中繼資料轉換為新版資料字典。執行主要版本升級前,請確認每個資料表的記憶體都超過 100 KB。您可以變更機器類型,暫時增加記憶體。
從 MySQL 5.7 升級至 MySQL 8.0 時,請檢查 MySQL 8.0 中的使用者授權變更
MySQL 適用的 Cloud SQL 8.0 版會使用名為
partial_revokes
的旗標,預設會設為ON
。與 MySQL 5.7 不同,這個旗標會移除在資料庫GRANT
指令中使用萬用字元的能力。為確保資料庫使用者能存取正確的資料庫結構定義,請在升級至 MySQL 8.0 前修改資料庫使用者權限。更新使用者的權限,以便使用必要資料庫結構定義的完整名稱,而非使用萬用字元。如要進一步瞭解此標記在 MySQL 8.0 中的運作方式,請參閱「MySQL 8.0 中的 partial_revokes」。
以模擬測試來測試升級。
在正式版資料庫升級前,請先在測試環境中執行端對端升級程序的模擬作業。您可以複製執行個體,建立資料的相同副本,以便測試升級程序。
除了驗證升級是否成功完成,也請執行測試,確保應用程式在升級後的資料庫中運作正常。
決定升級時機。
升級作業需要一段時間才能完成,在此期間,執行個體將無法使用。請在資料庫活動量偏低的時間點升級。
準備升級主要版本
升級前,請先完成下列步驟:
-
僅限從 MySQL 5.7 升級至 8.0:檢查並修正預先檢查程序中發現的不相容問題。常見的問題包括:
- 在儲存程序、觸發事件和其他資料庫物件中新增保留關鍵字,例如
RANKS
、GROUPS
、FUNCTION
。詳情請參閱「關鍵字和保留字」。 - 資料表定義中含有無效的 UTF 字元。
- 未提交的 XA 轉換,必須使用
XA COMMIT
陳述式提交或使用XA ROLLBACK
陳述式回溯。 - 外鍵限制名稱長度超過 64 個半形字元。
- 資料欄混合索引中的空間資料類型。詳情請參閱「空間資料類型」。
詳情請參閱「準備安裝升級」和「升級至 MySQL 8.0 嗎?」。
僅限從 MySQL 8.0 升級至 MySQL 8.4:檢查並修正在預先檢查程序中發現的不相容問題。常見問題可能包括:
- 過時的複製用語。
MASTER
和SLAVE
已從 MySQL 8.4 中完全移除。如果您仍使用含有這些字詞的指令或設定,則必須取代或移除這些字詞。如要進一步瞭解這些字詞的移除和替換作業,請參閱「MySQL 8.4 與 MySQL 8.0 的差異」。 - 請更新現有使用者帳戶的驗證外掛程式,改用
caching_sha2_password
驗證外掛程式,而非已淘汰的mysql_native_password
外掛程式。
如要變更現有的資料庫使用者帳戶,以便使用caching_sha2_password
驗證外掛程式,請使用下列指令: 將 username 和 user_password 替換為要更新的使用者帳戶值。ALTER USER 'username'@'%' IDENTIFIED WITH caching_sha2_password BY 'user_password';
- 在儲存程序、觸發事件和其他資料庫物件中新增保留關鍵字,例如
-
檢查磁碟空間和執行個體機器類型
升級至主要版本需要額外的磁碟空間和記憶體,才能儲存已升級的資料表和新的資料字典。磁碟空間不足會導致升級失敗,並且會回復至原始版本。Cloud SQL 建議您為每個資料表提供至少 100 KB 的記憶體。
注意:您可以在執行主要版本升級前,變更機器類型來暫時增加記憶體。詳情請參閱「變更機器類型」一文。
執行主要版本升級
您可以升級單一 Cloud SQL 執行個體的主要版本,也可以升級主要執行個體的主要版本,並在升級過程中納入所有備用資源,包括階層備用資源和跨區域備用資源。
升級單一執行個體的主要版本
當您為單一執行個體啟動升級作業時,Cloud SQL 會執行以下操作:
- 檢查執行個體的設定,確保執行個體可相容升級。
- Cloud SQL 驗證設定後,就會讓執行個體無法使用。
- 建立升級前的備份。
- 在執行個體上執行升級作業。
- 讓執行個體可供使用。
- 建立升級後備份。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下 [編輯]。
- 在「Instance info」部分,按一下「Upgrade」按鈕,然後確認要前往升級頁面。
- 在「Choose a database version」頁面上,點選「Database version for upgrade」清單,然後選取可用的資料庫主要版本。
- 按一下「繼續」。
- 在「Instance ID」方塊中輸入執行個體名稱,然後按一下「Start upgrade」按鈕。
請確認升級後的資料庫主要版本會顯示在執行個體「總覽」頁面中的執行個體名稱下方。
gcloud
開始升級。
使用
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
指令關閉訊息。取得升級作業名稱。
使用
gcloud sql operations list
指令,並加上--instance
旗標。在執行指令前,請將 INSTANCE_NAME 變數替換為執行個體名稱。
gcloud sql operations list --instance=INSTANCE_NAME
監控升級作業的狀態。
使用
gcloud sql operations describe
指令。執行指令前,請將 OPERATION 變數替換為先前步驟中擷取的升級作業名稱。
gcloud sql operations describe OPERATION
REST v1
開始直接升級。
請使用 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。
取得升級作業名稱。
將 PROJECT_ID 替換為專案 ID 後,請使用 GET 要求搭配
operations.list
方法。HTTP 方法和網址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
監控升級作業的狀態。
請使用 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 以上。
套用變更
如要在 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 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
刪除變更
如要刪除變更,請按照下列步驟操作:
- 如要停用防刪除功能,請在 Terraform 設定檔中將
deletion_protection
引數設為false
。deletion_protection = "false"
- 執行下列指令,並在提示中輸入
yes
,即可套用更新的 Terraform 設定:terraform apply
-
如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入
yes
:terraform destroy
當您提出就地升級要求時,Cloud SQL 會先執行升級前檢查。如果 Cloud SQL 判定您的執行個體尚未準備好升級,升級要求就會失敗,並顯示訊息建議您如何解決問題。另請參閱排解主要版本升級問題。
在主要版本升級中納入複本
如果主要執行個體有副本,您可以在升級中加入所有副本。Cloud SQL 可升級主要執行個體的所有備用資源,包括跨區域備用資源和層疊備用資源。
在主要版本升級中納入備援機制時,Cloud SQL 會執行下列操作:
- 檢查主要執行個體和備用資源的設定,確保執行個體和備用資源可相容於升級作業。
- 導致主要執行個體無法使用。
- 為主要執行個體建立升級前的備份。
- 停止所有複本的複製作業。
- 在主要執行個體上執行升級作業。
- 如果主要執行個體的升級作業成功,主要執行個體就會再次可用,並重新啟動複製作業。
- Cloud SQL 會為主要執行個體執行升級後備份。
- Cloud SQL 會繼續升級所有備用資源。
即使備用資源的主要版本升級失敗,主要執行個體仍可繼續使用。
如要在主要版本升級中納入備援機制,您無法使用Google Cloud 主控台或 Terraform。您只能使用 gcloud CLI 或 Cloud SQL Admin API。
gcloud
開始升級。
使用
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
指令關閉訊息。升級副本可能需要幾分鐘才能完成。如要查看升級狀態,請按照下列步驟操作:取得升級作業名稱。
使用
gcloud sql operations list
指令,並加上--instance
旗標。在執行指令前,請將 INSTANCE_NAME 變數替換為執行個體名稱。
gcloud sql operations list --instance=INSTANCE_NAME
監控升級作業的狀態。
使用
gcloud sql operations describe
指令。執行指令前,請將 OPERATION 變數替換為先前步驟中擷取的升級作業名稱。
gcloud sql operations describe OPERATION
REST
開始直接升級。
請使用 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
。
取得升級作業名稱。
將 PROJECT_ID 替換為專案 ID 後,請使用 GET 要求搭配
operations.list
方法。HTTP 方法和網址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations
監控升級作業的狀態。
請使用 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,或等到升級備份不再位於保留期間。
完成主要版本升級
完成主要執行個體的升級作業後,請執行下列步驟完成升級:-
執行驗收測試。
執行測試,確認升級後的系統運作正常。
-
選用:更新使用者權限。
如果您已升級至 MySQL 8.0,請注意 MySQL 已變更安全性和帳戶管理系統。詳情請參閱「MySQL 8.0 的新功能」一文。
這可能會導致在 MySQL 5.7 版執行個體中建立的使用者,與直接在 MySQL 8.0 中建立的使用者,擁有不同的權限。舉例來說,從 MySQL 5.7 升級的使用者可能沒有
CREATE ROLE
和DROP 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 中更新使用者權限:
建立已授予
cloudsqlsuperuser
角色的使用者。使用已建立的使用者,透過以下方式撤銷已升級使用者的所有先前權限:
REVOKE ALL PRIVILEGES ON *.* FROM user@host
- 將預期的權限授予升級的使用者。
-
選用步驟:建立備份。
雖然 Cloud SQL 會在您升級主要執行個體後自動建立備份,但 Cloud SQL 建議您自行建立備份,以便在必要時還原資料庫。
- 選用:如果您已升級至 MySQL 適用的 Cloud SQL 8.4,請一併將所有連接器、用戶端和 MySQL 殼層更新為 MySQL 8.4。
排解主要版本升級問題
如果您嘗試執行無效的升級指令 (例如,執行個體含有新版本的無效資料庫標記),Cloud SQL 會傳回錯誤訊息。
如果升級要求失敗,請檢查升級要求的語法。如果要求具有有效的結構,請嘗試查看下列建議。
查看升級記錄
如果有效的升級要求發生任何問題,Cloud SQL 會將錯誤記錄發布至 projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fmysql.err
。每個記錄項目都包含標籤,其中包含執行個體 ID,方便您找出發生升級錯誤的執行個體。請找出這類升級錯誤並加以修正。
如要查看錯誤記錄,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
在執行個體「總覽」頁面的「作業和記錄」窗格中,按一下「查看 MySQL 錯誤記錄」連結。
查看記錄的方式如下:
- 如要列出專案中的所有錯誤記錄,請在「記錄名稱」記錄篩選器中選取記錄名稱。
如要進一步瞭解查詢篩選器,請參閱「進階查詢」。
- 如要篩選單一執行個體的升級錯誤記錄,請在「Search all fields」方塊中輸入以下查詢,並在
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"
將主要執行個體還原至先前的主要版本
如果升級後的資料庫系統無法正常運作,您可能需要將主要執行個體還原為先前版本。方法是將升級前的備份還原至 Cloud SQL 復原執行個體,也就是執行升級前版本的新執行個體。
如要將主要執行個體還原為先前版本,請執行下列步驟:
找出升級前的備份。
請參閱「自動升級備份」。
建立復原執行個體。
使用 Cloud SQL 執行升級前備份時的版本號碼,建立新的 Cloud SQL 執行個體。設定原始執行個體使用的相同標記和例項設定。
還原升級前的備份。
還原升級前的備份至復原執行個體。這項作業可能需要幾分鐘才能完成。
新增唯讀備用資源。
如果您使用讀取備用資源,請個別新增讀取備用資源。
連結應用程式。
資料庫系統已復原後,請更新應用程式,加入復原執行個體及其讀取複本的詳細資料。您可以繼續在升級前的資料庫版本上放送流量。
限制
本節列出就地升級主要版本的限制。
- 您無法對外部備用資源執行就地升級主要版本。
- 如果執行個體的資料表超過 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';
將 USERNAME 和 PASSWORD 替換為適當的值。
常見問題
升級資料庫主要版本時,可能會出現下列問題。
- 可以。在 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 主要版本。您可以再次升級複本,但如果問題持續存在,複製作業可能會再次中斷。因此,建議您在執行主要版本升級時納入備援資源,而非個別升級每個備援資源。
如果備用資源未回溯至與主要執行個體相同的主要版本,則有兩種做法:
-
刪除損毀的複本、建立新的複本,然後升級新複本。
如果升級再次失敗,可能是因為在升級主要執行個體時,新增了不相容的變更。排解升級問題以找出問題所在,修正主執行個體,然後嘗試升級複本。詳情請參閱疑難排解。
-
升級主要執行個體
如果備用資源執行緒無法運作,則主要執行個體上的升級作業會重新建立備用資源。
-
- 為什麼升級後的複本會回溯至先前的主要版本?
如果升級失敗,備援資源就會回溯至主要執行個體的版本。您可以再次升級副本,但如果問題仍未解決,可以查看副本上的
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....
),則問題可能是由新的不相容資料造成,這些資料可能在複本升級後新增至主要執行個體。請參閱「準備升級主要版本」一文,瞭解如何修正不相容性問題,然後再進行升級。
後續步驟
- 瞭解連線至執行個體的選項。
- 瞭解匯入及匯出資料。
- 進一步瞭解如何設定資料庫標記。