本頁面說明如何升級資料庫主要版本,方法是升級 Cloud SQL 執行個體,而不是遷移資料。
簡介
資料庫軟體供應商會定期發布新的主要版本,其中包含新功能、效能改善和安全性強化功能。Cloud SQL 會在新版本推出後導入。Cloud SQL 支援新的主要版本後,您就可以升級執行個體,確保資料庫保持更新狀態。
您可以原地升級執行個體的資料庫版本,也可以遷移資料。原地升級是升級執行個體主要版本的簡單方式。您不必遷移資料或變更應用程式連線字串。升級後,您可以保留目前執行個體的名稱、IP 位址和其他設定。原地升級不需要移動資料檔案,而且可以更快完成。在某些情況下,停機時間會比遷移資料所需的時間短。
SQL Server 適用的 Cloud SQL 就地升級作業會使用 SQL Server 就地升級公用程式。規劃主要版本升級作業
- 確認您具備執行主要版本升級所需的角色:Cloud SQL 擁有者或 Cloud SQL 管理員。
選擇目標主要版本。
gcloud
如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」一文。
如要查看可在執行個體上進行原地升級的資料庫版本,請按照下列步驟操作:
- 執行下列指令。
- 在指令輸出內容中,找出標示為
upgradableDatabaseVersions
的區段。 - 每個子區段都會傳回可供升級的資料庫版本。在每個子區段中,請檢查下列欄位。
majorVersion
:可針對原地升級指定的主要版本。name
:包含主要版本的資料庫版本字串。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: "SQLSERVER_2022_STANDARD" name: "SQLSERVER_2022_STANDARD" display_name: "SQL Server 2022 Standard" }
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: "SQLSERVER_2022_STANDARD" name: "SQLSERVER_2022_STANDARD" display_name: "SQL Server 2022 Standard" }
如需 Cloud SQL 支援的完整資料庫版本清單,請參閱「資料庫版本和版本政策」。
請考量各個資料庫主要版本提供的功能,並解決不相容的問題。
新的主要版本會引入不相容的變更,可能需要您修改應用程式程式碼、結構定義或資料庫設定。升級資料庫執行個體前,請先查看目標主要版本的版本資訊,判斷您必須解決哪些不相容性問題。
以模擬測試來測試升級。
在正式版資料庫升級前,請先在測試環境中執行端對端升級程序的模擬作業。您可以複製執行個體,建立資料的相同副本,以便測試升級程序。
除了驗證升級是否成功完成,也請執行測試,確保應用程式在升級後的資料庫中運作正常。
決定升級時機。
升級作業需要一段時間才能完成,在此期間,執行個體將無法使用。請在資料庫活動量偏低的時間點升級。
執行主要版本升級
您可以升級單一 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
監控升級作業的狀態。
請先替換下列變數,然後使用
operations.get
方法搭配 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 會自動建立兩個隨選備份,稱為升級備份:
- 第一個升級備份是升級前備份,會在開始升級之前立即建立。您可以使用這項備份,將資料庫執行個體還原至先前版本的狀態。
- 第二個升級備份是升級後備份,會在系統允許對升級資料庫執行個體進行新寫入作業後立即建立。
查看備份清單時,升級備份會以 On-demand
類型列出。升級備份會加上標籤,方便您快速辨識。舉例來說,如果您要從 SQL Server Enterprise 2017 升級至 SQL Server Enterprise 2019 或 SQL Server Enterprise 2022,升級前的備份會標示為 Pre-upgrade backup, SQLSERVER_2017_ENTERPRISE to SQLSERVER_2019_ENTERPRISE or SQLSERVER_2022_ENTERPRISE.
,而升級後的備份會標示為 Post-upgrade backup, SQLSERVER_2019_ENTERPRISE or SQLSERVER_2022_ENTERPRISE from SQLSERVER_2017_ENTERPRISE.
與其他隨選備份一樣,升級備份會一直保留,直到您刪除備份或刪除執行個體為止。
升級資料庫相容性層級
資料庫相容性等級會決定資料庫在服務應用程式時的行為。資料庫相容性層級設定可確保與舊版 SQL Server 的回溯相容性,並與 Transact-SQL 和查詢最佳化工具的變更相關。升級 SQL Server 執行個體資料庫版本時,系統會保留現有資料庫的相容性層級,讓應用程式可繼續在較新版本的 SQL Server 上運作。升級相容性層級可讓您享有新功能、查詢處理改善和其他變更的優勢。
升級執行個體的資料庫引擎版本後,當資料庫服務的應用程式就緒時,請升級執行個體中每個資料庫的資料庫相容性層級。相容性層級設為最新版本後,資料庫會升級至最新功能,並改善效能。
如要升級資料庫相容性層級,請執行下列步驟:
找出資料庫的目前相容性等級。
舉例來說,SQL Server 2017 的預設相容性層級為 140。如要檢查資料庫目前的相容性層級,請在 Transact-SQL 中執行下列指令,並在
DATABASE_NAME
後面加上與 SQL Server 執行個體上的資料庫名稱。
USE DATABASE_NAME GO SELECT compatibility_level FROM sys.databases WHERE name = 'DATABASE_NAME'
決定目標相容性等級。
請找出已升級資料庫版本的預設相容性層級指定值,以便判斷資料庫的目標相容性層級。舉例來說,SQL Server 2022 的預設相容性層級為 160。請參閱這份表格,瞭解 SQL Server 新版本與相容性層級的對應關係。
評估目前與目標相容性等級之間的差異。
升級相容性等級前,請先研究目前相容性等級與目標相容性等級之間的系統行為差異。請參閱相容性等級的完整差異清單。
收集工作負載資料的基準資料。
升級相容性層級前,請使用 SQL Server 查詢儲存庫收集工作負載資料基準,以便日後找出並解決查詢降級的問題。您可以使用查詢儲存庫,針對一般業務週期擷取查詢和計畫,以建立成效基準。如需工作流程指引,請使用 SQL Server Management Studio 中的查詢調校輔助程式功能。
升級相容性層級。
如要變更資料庫的相容性層級,請在 Transact-SQL 中執行下列指令,並在替換
DATABASE_NAME
使用 SQL Server 例項中的資料庫名稱,並使用
TARGET_COMPATIBILITY_LEVEL
指定目標相容性層級。ALTER DATABASE DATABASE_NAME SET COMPATIBILITY_LEVEL = TARGET_COMPATIBILITY_LEVEL; GO
收集已升級的工作負載資料。
使用查詢儲存庫收集升級的工作負載資料,以便進行比較和回歸偵測。
解決查詢的回歸問題。
在大多數情況下,升級相容性層級的查詢最佳化工具變更可改善效能。不過,有時某些查詢的效能可能會退步。查詢儲存庫的「Regressed Queries」功能可協助您找出已回歸的查詢,並強制執行最後已知良好的查詢計畫。SQL Server 也提供自動計畫修正功能,可在發生查詢回歸時自動切換至上次已知的良好計畫。
完成主要版本升級
升級主要執行個體後,請執行驗收測試,確保升級後的系統能如預期運作。
排解主要版本升級問題
如果您嘗試執行無效的升級指令 (例如,執行個體含有新版本的無效資料庫標記),Cloud SQL 會傳回錯誤訊息。
如果升級要求失敗,請檢查升級要求的語法。如果要求具有有效的結構,請嘗試查看下列建議。
查看升級記錄
如果有效的升級要求發生任何問題,Cloud SQL 會將錯誤記錄發布至 projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fsqlserver.err
。每個記錄項目都包含標籤,其中包含執行個體 ID,方便您找出發生升級錯誤的執行個體。請找出這類升級錯誤並加以修正。
如要查看錯誤記錄,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
在執行個體「總覽」頁面的「作業和記錄」窗格中,按一下「查看 SQL Server 錯誤記錄」連結。
查看記錄的方式如下:
- 如要列出專案中的所有錯誤記錄,請在「記錄名稱」記錄篩選器中選取記錄名稱。
如要進一步瞭解查詢篩選器,請參閱「進階查詢」。
- 如要篩選單一執行個體的升級錯誤記錄,請在「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%2Fsqlserver.err"
舉例來說,如要依據在專案
buylots
中執行的名為shopping-db
的執行個體篩選升級錯誤記錄,請使用下列查詢篩選器:resource.type="cloudsql_database" resource.labels.database_id="buylots:shopping-db" logName : "projects/buylots/logs/cloudsql.googleapis.com%2Fsqlserver.err"
將主要執行個體還原至先前的主要版本
如果升級後的資料庫系統無法正常運作,您可能需要將主要執行個體還原為先前版本。方法是將升級前的備份還原至 Cloud SQL 復原執行個體,也就是執行升級前版本的新執行個體。
如要將主要執行個體還原為先前版本,請執行下列步驟:
找出升級前的備份。
請參閱「自動升級備份」。
建立復原執行個體。
使用 Cloud SQL 執行升級前備份時的版本號碼,建立新的 Cloud SQL 執行個體。設定原始執行個體使用的相同標記和例項設定。
還原升級前的備份。
還原升級前的備份至復原執行個體。這項作業可能需要幾分鐘才能完成。
新增唯讀備用資源。
如果您使用讀取備用資源,請個別新增讀取備用資源。
連結應用程式。
資料庫系統已復原後,請更新應用程式,加入復原執行個體及其讀取複本的詳細資料。您可以繼續在升級前的資料庫版本上放送流量。
限制
本節列出就地升級主要版本的限制。
- 您無法對外部備用資源執行就地升級主要版本。
常見問題
升級資料庫主要版本時,可能會出現下列問題。
- 可以。在 Cloud SQL 執行升級作業期間,您的執行個體將無法使用一段時間。
- 升級需要多久時間?
升級單一執行個體通常會在 10 分鐘內完成。如果執行個體設定的 vCPU 或記憶體數量不多,升級作業可能會花費較多時間。
如果執行個體主機上有太多資料庫或資料表,或是資料庫非常大,升級作業可能需要數小時甚至超時,因為升級總時間會與資料庫中的物件數量相對應。如果您有需要升級的多個執行個體,升級時間會成比例增加。
- 我可以監控升級程序的每個步驟嗎?
- 雖然 Cloud SQL 可讓您監控升級作業是否仍在進行中,但您無法追蹤每項升級中的個別步驟。
- 開始升級後,可以取消嗎?
- 否,升級作業開始後就無法取消。如果升級失敗,Cloud SQL 會自動將執行個體還原至先前的版本。
- 升級期間,我的設定會受到什麼影響?
當您執行就地升級至主要版本時,Cloud SQL 會保留資料庫設定,包括執行個體名稱、IP 位址、明確設定的旗標值和使用者資料。不過,系統變數的預設值可能會變更。
詳情請參閱「設定資料庫標記」。如果目標版本不再支援特定旗標或值,Cloud SQL 會在升級期間自動移除該旗標。
後續步驟
- 瞭解連線至執行個體的選項。
- 瞭解匯入及匯出資料。
- 進一步瞭解如何設定資料庫標記。