設定時間點復原 (PITR)

時間點復原 (PITR) 可讓您將 Cloud SQL 執行個體還原至特定時間點。這有助於復原遺失的資料,並還原非預期的變更或損毀。

PITR 需要自動備份。如要為現有執行個體設定 PITR,可以啟用或停用這項功能、調整交易記錄保留期限,以及將交易記錄儲存空間切換至 Cloud Storage。

事前準備

開始之前,請先詳閱下列事項:

  • 如果您在現有執行個體上啟用 PITR,執行個體會重新啟動。
  • 在 Cloud de Confiance 控制台建立 Cloud SQL Enterprise 版本執行個體時,系統預設會啟用 PITR。如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API,則必須手動啟用這項功能。
  • 無論採用何種方法,建立 Cloud SQL Enterprise Plus 版執行個體時,系統預設會啟用 PITR。如要停用這項功能,則必須手動操作。
  • 在 Cloud de Confiance 控制台建立執行個體時,系統預設會啟用自動備份。如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API,則必須手動啟用這項功能。

啟用 PITR

下列程序會在現有主要執行個體上啟用 PITR。

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 針對要啟用時間點復原功能的執行個體,開啟「更多動作」選單 更多動作圖示。,然後按一下「編輯」。
  3. 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
  4. 勾選「啟用時間點復原」核取方塊。
  5. 在「Days of logs」(記錄檔天數) 欄位中,輸入要保留記錄檔的天數。Cloud SQL Enterprise Plus 版本為 1 到 35 天,Cloud SQL Enterprise 版本則為 1 到 7 天。
  6. 按一下 [儲存]。

gcloud

  1. 顯示執行個體總覽:
    gcloud sql instances describe INSTANCE_NAME
  2. 如果 backupConfiguration 區段中顯示 enabled: false,請啟用排定的備份:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    請使用 UTC±00 時區的 24 小時制指定 backup-start-time 參數。

  3. 啟用 PITR:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery

    如要在主要執行個體上啟用 PITR,您也可以新增下列參數,設定交易記錄的保留天數:

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. 確認變更:
    gcloud sql instances describe INSTANCE_NAME

    如果變更成功,backupConfiguration 區段會顯示 pointInTimeRecoveryEnabled: true。

Terraform

如要啟用時間點復原功能,請使用 Terraform 資源。

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # 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
}

套用變更

如要在 Cloud de Confiance 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell。
  2. 設定要套用 Terraform 設定的預設 Cloud de Confiance 專案。

    每個專案只需執行這個指令一次,而且可以在任何目錄中執行。

    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. 開啟 Cloud de Confiance 專案即可查看結果。在 Cloud de Confiance 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false。
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新後的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,移除先前使用 Terraform 設定套用的資源:

    terraform destroy

REST v1

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID: Cloud de Confiance 專案的 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: Cloud de Confiance 專案的 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 回覆:

停用 PITR

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 開啟要停用的執行個體的「更多動作」選單 更多動作圖示。,然後選取「編輯」。
  3. 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
  4. 取消勾選「啟用時間點復原」。
  5. 按一下 [儲存]。

gcloud

  1. 停用時間點復原功能:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. 確認您的變更:
    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 回覆:

設定交易記錄保留期限

如要設定預寫記錄檔的保留天數,請按照下列步驟操作:

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 針對要設定交易記錄的執行個體,開啟「更多動作」選單 更多動作圖示。,然後選取「編輯」。
  3. 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
  4. 在「Enable point-in-time recovery」(啟用時間點復原功能) 區段中,展開「Advanced options」(進階選項)。
  5. 輸入記錄保留天數:Cloud SQL Enterprise Plus 版本為 1 至 35 天,Cloud SQL Enterprise 版本為 1 至 7 天。
  6. 按一下 [儲存]。

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 回覆:

查看用於 PITR 的交易記錄儲存位置

您可以查看 Cloud SQL 執行個體儲存 PITR 交易記錄的位置。

gcloud

如要判斷執行個體是否將 PITR 記錄儲存在磁碟或 Cloud Storage,請使用下列指令:

   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 POSTGRES_12      us-central-1     DISK
my_02 POSTGRES_12      us-central-1     CLOUD_STORAGE
...
   

在指令輸出內容中,transactionalLogStorageState 欄位或 TRANSACTIONAL_LOG_STORAGE_STATE 欄會提供執行個體 PITR 交易記錄的儲存位置資訊。可能的交易記錄儲存空間狀態如下:

  • DISK:執行個體會將用於 PITR 的交易記錄儲存在磁碟上。如果將 Cloud SQL Enterprise 版本執行個體升級為 Cloud SQL Enterprise Plus 版本,升級程序會自動將記錄檔儲存位置切換至 Cloud Storage。詳情請參閱「使用就地升級功能,將執行個體升級至 Cloud SQL Enterprise Plus 版本」。您也可以選擇使用 gcloud CLI 或 Cloud SQL Admin API 切換儲存位置,不必升級執行個體版本,也不會造成任何停機時間。詳情請參閱「將交易記錄儲存空間切換至 Cloud Storage」。
  • SWITCHING_TO_CLOUD_STORAGE:執行個體正在將 PITR 交易記錄的儲存位置切換至 Cloud Storage。
  • SWITCHED_TO_CLOUD_STORAGE:執行個體已完成將 PITR 交易記錄的儲存位置從磁碟切換至 Cloud Storage。
  • CLOUD_STORAGE:執行個體會將用於 PITR 的交易記錄儲存在 Cloud Storage。

將交易記錄儲存空間切換至 Cloud Storage

如果執行個體將用於 PITR 的交易記錄儲存在磁碟上,您可以將儲存位置切換至 Cloud Storage,而不會造成任何停機時間。切換儲存位置的整體程序大約需要交易記錄保留期限 (天數) 才能完成。切換後,交易記錄就會開始在 Cloud Storage 中累積。作業期間,您可以使用「檢查用於 PITR 的交易記錄儲存位置」中的指令,查看整體程序的狀態。

切換至 Cloud Storage 的整體程序完成後,Cloud SQL 會使用 Cloud Storage 的交易記錄進行 PITR。

gcloud

如要將儲存空間位置切換至 Cloud Storage,請使用下列指令:

   gcloud sql instances patch INSTANCE_NAME \
      --switch-transaction-logs-to-cloud-storage
   

將 INSTANCE_NAME 替換為執行個體名稱。執行個體必須是主要執行個體,而非副本執行個體。回應大致如下:

The following message is used for the patch API method.
{"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"}

Patching Cloud SQL instance...done.
Updated
[https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
   

如果指令傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。

REST v1

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID。
  • INSTANCE_ID:執行個體 ID。執行個體必須是主要執行個體,而非副本執行個體。

HTTP 方法和網址:

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

JSON 要求主體:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

如果要求傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。

REST v1beta4

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID。
  • INSTANCE_ID:執行個體 ID。執行個體必須是主要執行個體,而非副本執行個體。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

如果要求傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。

疑難排解改用 Cloud Storage 的問題

將交易記錄的儲存位置從磁碟切換至 Cloud Storage 時,可能會傳回 INVALID REQUEST 程式碼,下表列出可能發生的錯誤。

問題 疑難排解
Switching the storage location of the transaction logs used for PITR is not supported for instances with database type %s. 請確認您是在 MySQL 適用的 Cloud SQL 或 PostgreSQL 適用的 Cloud SQL 執行個體上執行 gcloud CLI 指令或提出 API 要求。SQL Server 適用的 Cloud SQL 不支援使用 gcloud CLI 或 Cloud SQL Admin API 切換交易記錄的儲存位置。
PostgreSQL transactional logging is not enabled on this instance. PostgreSQL 會使用預寫記錄做為時間點復原 (PITR) 的交易記錄。如要支援 PITR,PostgreSQL 會要求您在執行個體上啟用預寫記錄。如要進一步瞭解如何啟用預寫記錄,請參閱「啟用 PITR」。
This instance is already storing transaction logs used for PITR in Cloud Storage 如要驗證交易記錄的儲存位置,請執行「檢查用於 PITR 的交易記錄儲存位置」中的指令。
The instance is already switching transaction logs used for PITR from disk to Cloud Storage.

等待切換作業完成。

如要確認作業狀態和交易記錄的儲存位置,請執行「查看用於 PITR 的交易記錄儲存位置」中的指令。

後續步驟