本頁說明如何使用時間點復原 (PITR) 還原主要 Cloud SQL 執行個體。
如要進一步瞭解 PITR,請參閱「時間點復原 (PITR)」一文。
無論您使用何種建立方法,只要建立 Cloud SQL Enterprise Plus 版執行個體,系統就會預設啟用 PITR。如要停用這項功能,請務必手動停用。
無論您使用何種建立方法,只要建立 Cloud SQL Enterprise 版執行個體,系統一律會預設為停用 PITR。在這種情況下,如果您想啟用功能,就必須手動啟用。
時間點復原功能的記錄儲存空間
我們已於 2024 年 5 月 31 日推出 PITR 的交易記錄儲存功能,可在 Cloud Storage 中使用。自這項功能推出以來,適用下列條件:在這個日期之前建立的支援 PITR 的 Cloud SQL 執行個體,會將 PITR 交易記錄儲存在磁碟上。這些執行個體的大部分 PITR 交易記錄已遷移至 Cloud Storage。如要確認特定執行個體的記錄位置,請參閱「檢查 PITR 所用的交易記錄儲存位置」。
在這個日期或之後啟用 PITR 並建立的所有 Cloud SQL 執行個體,都會將這些記錄儲存在 Cloud Storage 中。
交易記錄會定期更新,並使用儲存空間。Cloud SQL 會自動刪除交易記錄及其相關的自動備份。這是在transactionLogRetentionDays
參數的值設定滿足後發生的情況。如要進一步瞭解這個參數,請參閱「記錄和磁碟用量」。
如果執行個體只在磁碟上儲存交易記錄,您可以先停用 PITR,然後再重新啟用,藉此設定 Cloud SQL 在 Cloud Storage 中儲存記錄。您無法將 Cloud Storage 中的記錄檔移回磁碟。
如要確保執行個體的記錄儲存在 Cloud Storage 中,而非磁碟上,請完成下列操作:
- 檢查執行個體是否將記錄儲存在磁碟或 Cloud Storage 中。
- 檢查執行個體的網路架構。如果執行個體採用舊版網路架構,請將其升級為新版網路架構。
- 如果磁碟上的記錄檔大小導致執行個體發生效能問題,請停用 PITR,然後重新啟用。
記錄和磁碟用量
如果執行個體將交易記錄儲存在 Cloud Storage 中,記錄會儲存在與主要執行個體相同的區域。這類記錄儲存空間 (Cloud SQL Enterprise Plus 版本最多可保留 35 天,Cloud SQL Enterprise 版本最多可保留 7 天,為 PITR 的最大長度) 不會產生額外的執行個體費用。
Cloud SQL 會定期產生交易記錄,而這些記錄會使用儲存空間。Cloud SQL 會自動刪除交易記錄及其相關的自動備份。這是在您設定的 transactionLogRetentionDays
參數值達到指定值後發生的情況。這個參數會指定 Cloud SQL 保留交易記錄檔的數量。針對 Cloud SQL Enterprise Plus 版本,您可以將保留的交易記錄天數設為 1 到 35 天,而針對 Cloud SQL Enterprise 版本,您可以將這個值設為 1 到 7 天。
如果未設定這個參數的值,系統會為 Cloud SQL Enterprise Plus 版本的執行個體設定預設的交易記錄保留期限 (14 天),以及為 Cloud SQL Enterprise 版本的執行個體設定 7 天。如要進一步瞭解如何套用這項設定,請參閱「設定交易記錄保留期限」。
如要瞭解交易記錄使用了多少磁碟空間,請查看執行個體的 bytes_used_by_data_type
指標。資料類型的值會傳回磁碟上的交易記錄大小。如果執行個體會在磁碟上儲存用於 PITR 的交易記錄,Cloud SQL 會每天從磁碟中清除資料,以符合 transactionLogRetentionDays
PITR 設定。詳情請參閱「自動備份保留期限」。
限制
以下限制與已啟用 PITR 的執行個體有關,而磁碟上交易記錄的大小會導致執行個體發生問題:
- 您可以停用 PITR 並重新啟用,確保 Cloud SQL 會在與執行個體相同的區域中,將記錄儲存在 Cloud Storage 中。不過,Cloud SQL 會刪除所有現有記錄,因此您必須重新啟用 PITR,才能執行 PITR 作業。
- 您可以增加執行個體的儲存空間大小,但磁碟用量中的交易記錄大小可能會暫時增加。
- 為避免發生意外的儲存空間問題,建議您啟用自動增加儲存空間功能。只有在執行個體已啟用 PITR,且記錄儲存在磁碟上時,這項最佳化建議才會套用。
- 如果您想刪除記錄並復原儲存空間,可以停用 PITR,但不必重新啟用。不過,減少使用的儲存空間並不會縮減為執行個體配置的磁碟大小。
系統會每天清除一次記錄,而非持續清除。將記錄保留期限設為兩天,表示系統會保留至少兩天的記錄,最多三天的記錄。建議您將備份數量設為比記錄保留天數多 1 天。
舉例來說,如果您將
7
指定為transactionLogRetentionDays
參數的值,則針對backupRetentionSettings
參數,將retainedBackups
的數量設為8
。
如要進一步瞭解 PITR,請參閱「時間點復原 (PITR)」一文。
PITR 的資料庫復原模型
如果您在執行個體上啟用 PITR,Cloud SQL 會自動將現有及後續資料庫的復原模式設為完整復原模式。
如要進一步瞭解 SQL Server 復原模型,請參閱 Microsoft 說明文件。
啟用 PITR
在 Google Cloud 主控台中建立新的執行個體時,系統會自動啟用「自動備份」設定。以下程序會在現有主要執行個體上啟用 PITR。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 為要啟用 PITR 的執行個體開啟「更多動作」選單
,然後按一下「編輯」。
- 展開「自訂執行個體」下方的「資料保護」專區。
- 勾選「Enable point-in-time recovery」(啟用時間點復原) 核取方塊。
- 在「Days of logs」欄位中,輸入記錄保留天數,Cloud SQL Enterprise Plus 版本為 1 到 35 天,Cloud SQL Enterprise 版本為 1 到 7 天。
- 按一下 [儲存]。
gcloud
- 顯示執行個體總覽:
gcloud sql instances describe INSTANCE_NAME
- 如果在
backupConfiguration
部分看到enabled: false
,請啟用定期備份功能:gcloud sql instances patch INSTANCE_NAME \ --backup-start-time=HH:MM
使用 UTC±00 時區的 24 小時制,指定
backup-start-time
參數。 - 啟用 PITR:
gcloud sql instances patch INSTANCE_NAME \ --enable-point-in-time-recovery
如果要在主要執行個體上啟用 PITR,您也可以新增下列參數,設定要保留交易記錄的天數:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
- 確認變更:
gcloud sql instances describe INSTANCE_NAME
如果變更成功,您會在
backupConfiguration
部分看到pointInTimeRecoveryEnabled: true
。
Terraform
如要啟用 PITR,請使用 Terraform 資源。
為 Cloud SQL Enterprise Plus 版本啟用 PITR
請使用下列 Terraform 程式碼範例,建立已啟用時間點復原功能的 Cloud SQL Enterprise Plus 版執行個體:為 Cloud SQL Enterprise 版啟用 PITR
請使用下列 Terraform 程式碼範例,建立已啟用 PITR 的 Cloud SQL Enterprise 版執行個體:套用變更
如要在 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
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:您為高可用性設定的主執行個體或讀取備用資源執行個體的名稱
- START_TIME:時間 (以小時和分鐘為單位)
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
JSON 要求主體:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:您為高可用性設定的主執行個體或讀取備用資源執行個體的名稱
- START_TIME:時間 (以小時和分鐘為單位)
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
JSON 要求主體:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
取得最新的復原時間
對於可用的執行個體,您可以執行時間點復原至最新時間。如果執行個體無法使用,且執行個體記錄儲存在 Cloud Storage 中,您可以擷取最新的復原時間,並在該時間執行 PITR。無論是哪種情況,您都可以將執行個體還原至不同的主要或次要區域,方法是提供偏好區域的值。
gcloud
取得可復原無法使用的 Cloud SQL 執行個體的最新時間。
將 INSTANCE_NAME 替換為要查詢的執行個體名稱。
gcloud sql instances get-latest-recovery-time INSTANCE_NAME
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_NAME:您要查詢最新復原時間的執行個體名稱
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#getLatestRecoveryTime", "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z" }
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- INSTANCE_NAME:您要查詢最新復原時間的執行個體名稱
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#getLatestRecoveryTime", "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z" }
執行 PITR
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 為要復原的執行個體開啟「更多動作」選單
,然後按一下「建立複本」。
- 您可以選擇在「Create a clone」(建立本機複本) 頁面中,更新新本機複本的 ID。
- 選取「從過去時間點複製資料」。
- 輸入 PITR 時間。
- 選取「所有資料庫」,或指定資料庫名稱。
如果您指定資料庫名稱,則只能選取一個。根據預設,PITR 適用於所有資料庫。 - 按一下 [建立本機複本]。
gcloud
使用 PITR 建立複本。
更改下列內容:
- SOURCE_INSTANCE_NAME:要從中還原的執行個體名稱。
- NEW_INSTANCE_NAME:複本名稱。
- TIMESTAMP - 來源執行個體的 UTC 時區,採用 RFC 3339 格式。例如 2012-11-15T16:19:00.094Z。
gcloud sql instances clone SOURCE_INSTANCE_NAME \ NEW_INSTANCE_NAME \ --point-in-time 'TIMESTAMP'
REST v1
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- target-instance-id:目標執行個體 ID
- source-instance-id:來源例項 ID
- restore-timestamp 要還原至的時間點
在 JSON 要求中,您可以選擇指定最多一個特定資料庫名稱,如下所示:"databaseNames": "my-database"
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
JSON 要求主體:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- target-instance-id:目標執行個體 ID
- source-instance-id:來源例項 ID
- restore-timestamp 要還原至的時間點
在 JSON 要求中,您可以選擇指定最多一個特定資料庫名稱,如下所示:"databaseNames": "my-database"
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
JSON 要求主體:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
停用 PITR
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 為要停用的執行個體開啟「更多動作」選單
,然後選取「編輯」。
- 展開「自訂執行個體」下方的「資料保護」專區。
- 清除「啟用時間點復原」。
- 按一下 [儲存]。
gcloud
- 停用時間點復原功能:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-point-in-time-recovery
- 確認您的變更:
gcloud sql instances describe INSTANCE_NAME
如果變更成功,您會在
backupConfiguration
部分看到pointInTimeRecoveryEnabled: false
。
REST v1
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
JSON 要求主體:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
JSON 要求主體:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
檢查 PITR 所用的交易記錄儲存位置
您可以查看 Cloud SQL 執行個體儲存 PITR 所用交易記錄的位置。
gcloud
如要判斷執行個體是否在磁碟或 Cloud Storage 上儲存 PITR 記錄,請使用下列指令:
gcloud sql instances describe INSTANCE_NAME
將 INSTANCE_NAME 替換為執行個體名稱。
如果是同一個專案中的多個執行個體,您也可以查看交易記錄的儲存位置。如要判斷多個例項的位置,請使用下列指令:
gcloud sql instances list --show-transactional-log-storage-state
回應範例:
NAME DATABASE_VERSION LOCATION TRANSACTIONAL_LOG_STORAGE_STATE my_01 SQLSERVER_2019_STANDARD us-central-1 DISK my_02 SQLSERVER_2019_STANDARD us-central-1 CLOUD_STORAGE ...
在指令的輸出內容中,transactionalLogStorageState
欄位或 TRANSACTIONAL_LOG_STORAGE_STATE
欄會提供 PITR 交易記錄在執行個體中儲存的位置資訊。可能的交易記錄儲存狀態如下:
DISK
:執行個體會在磁碟上儲存用於 PITR 的交易記錄。CLOUD_STORAGE
:執行個體會在 Cloud Storage 中儲存用於 PITR 的交易記錄。
設定交易記錄保留期限
如要設定交易記錄檔的保留天數,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 針對要設定交易記錄的執行個體,開啟「更多動作」選單
,然後選取「編輯」。
- 展開「自訂執行個體」下方的「資料保護」專區。
- 在「啟用時間點復原」專區中,展開「進階選項」。
- 輸入記錄保留天數,Cloud SQL Enterprise Plus 版本為 1 到 35 天,Cloud SQL Enterprise 版本為 1 到 7 天。
- 按一下 [儲存]。
gcloud
編輯執行個體,設定交易記錄檔的保留天數。
更改下列內容:
- INSTANCE_NAME:您要設定交易記錄的執行個體名稱。
DAYS_TO_RETAIN:要保留的交易記錄天數。對於 Cloud SQL Enterprise Plus 版本,有效範圍為 1 到 35 天,預設為 14 天。對於 Cloud SQL Enterprise 版本,有效範圍介於 1 到 7 天,預設為 7 天。
如果您未指定值,Cloud SQL 會使用預設值。這項設定只有在啟用 PITR 時才有效。儲存更多天的交易記錄需要更大的儲存空間。
gcloud sql instances patch INSTANCE_NAME
--retained-transaction-log-days=DAYS_TO_RETAIN
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
DAYS_TO_RETAIN:交易記錄的保留天數。對於 Cloud SQL Enterprise Plus 版本,有效範圍介於 1 到 35 天,預設為 14 天。對於 Cloud SQL Enterprise 版本,有效範圍為 1 到 7 天,預設為 7 天。
如未指定任何值,則會使用預設值。這項設定只有在啟用 PITR 時才有效。儲存交易記錄的天數越多,所需儲存空間就越大。
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
JSON 要求主體:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。
DAYS_TO_RETAIN:交易記錄的保留天數。對於 Cloud SQL Enterprise Plus 版本,有效範圍介於 1 到 35 天,預設為 14 天。對於 Cloud SQL Enterprise 版本,有效範圍為 1 到 7 天,預設為 7 天。
如未指定任何值,則會使用預設值。這項設定只有在啟用 PITR 時才有效。儲存交易記錄的天數越多,所需儲存空間就越大。
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
JSON 要求主體:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
疑難排解
問題 | 疑難排解 |
---|---|
或
|
您提供的時間戳記無效。 |
或
|
您提供的時間戳記是備份時間,或找不到 binlog 座標的時間。 |
後續步驟
- 在複本上設定旗標