使用時間點復原 (PITR)

本頁說明如何使用時間點復原 (PITR) 還原主要 Cloud SQL 執行個體。

如要進一步瞭解 PITR,請參閱「時間點復原 (PITR)」一文。

無論您使用何種建立方法,只要建立 Cloud SQL Enterprise Plus 版執行個體,系統就會預設啟用 PITR。如要停用這項功能,請務必手動停用。

如果您在 Google Cloud 控制台中建立 Cloud SQL Enterprise 版執行個體,系統會預設啟用 PITR。否則,如果您是使用 gcloud CLI、Terraform 或 Cloud SQL Admin API 建立執行個體,則 PITR 預設為停用。在這種情況下,如果您想啟用功能,就必須手動啟用。

時間點復原功能的記錄儲存空間

Cloud SQL 會使用預先寫入記錄 (WAL) 封存作業來執行 PITR。

我們在 2023 年 1 月 9 日推出了 PITR 預先寫入記錄檔的儲存功能,可在 Cloud Storage 中使用。自這項服務推出以來,適用下列條件:

  • 所有 Cloud SQL Enterprise Plus 版本執行個體都會將預先寫入記錄儲存在 Cloud Storage 中。只有從 Cloud SQL Enterprise 版本升級,且在 2023 年 1 月 9 日前啟用 PITR 的 Cloud SQL Enterprise Plus 版本執行個體,才會繼續將記錄儲存在磁碟上。
  • 在 2023 年 1 月 9 日前啟用 PITR 所建立的 Cloud SQL Enterprise 版執行個體,會繼續將記錄儲存在磁碟上。
  • 如果您在 2024 年 8 月 15 日之後,將儲存 PITR 用途的交易記錄檔案到磁碟的 Cloud SQL Enterprise 版執行個體升級至 Cloud SQL Enterprise Plus 版,升級程序會將用於 PITR 的交易記錄檔案的儲存位置切換至 Cloud Storage。如需更多資訊,請參閱使用原地升級功能,將執行個體升級為 Cloud SQL Enterprise Plus 版本
  • 2023 年 1 月 9 日後,所有啟用 PITR 的 Cloud SQL Enterprise 版執行個體都會在 Cloud Storage 中儲存記錄。

如果執行個體只在磁碟上儲存預寫記錄,您可以使用 gcloud CLI 或 Cloud SQL Admin API,將用於 PITR 的交易記錄儲存位置從磁碟切換至 Cloud Storage,且不會造成任何服務中斷時間。詳情請參閱「將交易記錄儲存空間切換至 Cloud Storage」。

記錄保留期限

如要查看執行個體是否在 Cloud Storage 中儲存用於 PITR 的記錄,請使用「檢查用於 PITR 的交易記錄檔的儲存位置」。

使用 PostgreSQL 用戶端 (例如 psqlpgAdmin) 連線至執行個體的資料庫後,請執行下列指令:show archive_command。如果有任何預先寫入記錄已封存至 Cloud Storage,您會看到 -async_archive -remote_storage 圖示。

所有已啟用 PITR 的現有執行個體,其記錄仍會儲存在磁碟上。

如果記錄儲存在 Cloud Storage 中,Cloud SQL 會每五分鐘或更短的時間上傳一次記錄。因此,如果 Cloud SQL 執行個體可用,則可將執行個體還原至最新時間。不過,如果執行個體無法使用復原點目標通常為五分鐘或更短的時間。使用 gcloud CLI 或 Admin API 查看可還原執行個體的最新時間,然後執行該時間點的復原作業。

使用 PITR 的預寫記錄會自動刪除,並與相關聯的自動備份一併刪除,這通常會在 transactionLogRetentionDays 的值設定滿足後發生。這是 Cloud SQL 為 PITR 保留的交易記錄天數。在 Cloud SQL Enterprise Plus 版本中,您可以將值設為 1 到 35,在 Cloud SQL Enterprise 版本中,您可以將值設為 1 到 7。

如果在啟用 PITR 前,在 Cloud SQL 執行個體上還原備份,就會失去可讓 PITR 運作的預先寫入記錄。

對於 啟用客戶管理的加密金鑰 (CMEK) 的執行個體,預寫記錄會使用最新版本的 CMEK 進行加密。如要執行還原作業,您為 retained-transaction-log-days 參數設定的日期數,應為金鑰的所有版本中最新的版本。

如果執行個體將預先寫入記錄儲存在 Cloud Storage 中,則記錄會儲存在與主要執行個體相同的區域。這類記錄儲存空間 (Cloud SQL Enterprise Plus 版本最多可保留 35 天,Cloud SQL Enterprise 版本最多可保留 7 天,為 PITR 的最大長度) 不會產生額外的執行個體費用。

記錄和磁碟用量

如果執行個體已啟用 PITR,且磁碟上的預先寫入記錄大小導致執行個體發生問題:

  • 您可以使用 gcloud CLI 或 Cloud SQL Admin API,切換 PITR 記錄的儲存位置,將磁碟記錄切換至 Cloud Storage,且不會造成服務中斷。

  • 您可以將執行個體升級為 Cloud SQL Enterprise Plus 版本

  • 您可以增加執行個體的儲存空間大小,但磁碟用量中的預先寫入記錄大小可能會暫時增加。

  • 建議您啟用 自動增加儲存空間功能,以免發生意外的儲存空間問題。只有在執行個體已啟用 PITR,且日誌儲存在磁碟上時,這項建議才適用。

  • 如要刪除記錄檔並復原儲存空間,您可以停用 PITR。減少使用的預寫記錄不會縮減為執行個體配置的磁碟大小。

  • 系統會每天清除一次記錄,而非持續清除。將記錄保留期限設為兩天,表示系統會保留至少兩天的記錄,最多三天的記錄。建議您將備份數量設為比記錄保留天數多 1 天。

    舉例來說,如果您將 7 指定為 transactionLogRetentionDays 參數的值,則針對 backupRetentionSettings 參數,將 retainedBackups 的數量設為 8

啟用 PITR

在 Google Cloud 控制台中建立新執行個體時,系統會自動啟用「自動備份」和「啟用時間點復原」

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 為要啟用 PITR 的執行個體開啟「更多動作」選單 更多動作圖示。,然後按一下「編輯」
  3. 展開「自訂執行個體」下方的「資料保護」專區。
  4. 勾選「Enable point-in-time recovery」(啟用時間點復原) 核取方塊。
  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

如要啟用 PITR,請使用 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
}

套用變更

如要在 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. 如要移除先前透過 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 回應:

在無法使用的執行個體上執行 PITR

控制台

您可能會想將無法使用的執行個體還原至其他可用區,原因如下:

  • 無法存取設定執行個體所在的區域。這個執行個體具有 FAILED 狀態。
  • 執行個體正在進行維護。這個例項具有 MAINTENANCE 狀態。

如要復原無法使用的執行個體,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 找出要複製的執行個體列。
  3. 在「Actions」欄中,按一下 「More Actions」選單。
  4. 按一下 [建立本機複本]
  5. 在「建立複本」頁面上,完成下列操作:
    1. 如有需要,請在「Instance ID」(執行個體 ID) 欄位中更新執行個體 ID。
    2. 按一下「從過去時間點複製資料」
    3. 在「時間點」欄位中,選取要複製資料的日期和時間。這項作業會將執行個體復原為目標時間點的狀態。
    4. 按一下 [建立本機複本]
  6. 複本初始化期間,您會返回執行個體清單頁面。

gcloud

您可能會想要將無法使用的執行個體復原到其他區域,因為無法存取設定執行個體的區域。

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--point-in-time DATE_AND_TIME_STAMP \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

執行 gcloud sql instances clone 指令的使用者或服務帳戶必須具備 cloudsql.instances.clone 權限。如要進一步瞭解執行 gcloud CLI 指令所需的權限,請參閱「Cloud SQL 權限」一文。

REST v1

您可能會想要將無法使用的執行個體復原到其他區域,因為無法存取執行個體所在的設定區域。

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

  • PROJECT_ID:專案 ID。
  • SOURCE_INSTANCE_NAME:來源執行個體的名稱。
  • TARGET_INSTANCE_NAME:目標 (複製) 執行個體的名稱。
  • DATE_AND_TIME_STAMP:來源執行個體的日期和時間戳記,採用 世界標準時間RFC 3339 格式 (例如
    2012-11-15T16:19:00.094Z)。
  • ZONE_NAME:選用。目標執行個體的主要區域名稱。這可用於為要複製的 Cloud SQL 執行個體指定不同的主要可用區。對於區域執行個體,這個區域會取代主要區域,但次要區域會與執行個體相同。
  • SECONDARY_ZONE_NAME:選用。目標執行個體的次要區域名稱。這可用於為要複製的區域 Cloud SQL 執行個體指定不同的次要區域。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

JSON 要求主體:

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

使用 instances.clone API 方法的使用者或服務帳戶必須具備 cloudsql.instances.clone 權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。

REST v1beta4

您可能會想要將無法使用的執行個體復原到其他區域,因為無法存取執行個體所在的設定區域。

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

  • PROJECT_ID:專案 ID。
  • SOURCE_INSTANCE_NAME:來源執行個體的名稱。
  • TARGET_INSTANCE_NAME:目標 (複製) 執行個體的名稱。
  • DATE_AND_TIME_STAMP:來源執行個體的日期和時間戳記,採用 世界標準時間RFC 3339 格式 (例如
    2012-11-15T16:19:00.094Z)。
  • ZONE_NAME:選用。目標執行個體的主要區域名稱。這可用於指定要複製的 Cloud SQL 執行個體的不同主要區域。對於區域執行個體,這個區域會取代主要區域,但次要區域會與執行個體相同。
  • SECONDARY_ZONE_NAME:選用。目標執行個體的次要區域名稱。這可用於為要複製的區域 Cloud SQL 執行個體指定不同的次要區域。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

JSON 要求主體:

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

使用 instances.clone API 方法的使用者或服務帳戶必須具備 cloudsql.instances.clone 權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。

如果您在最新可復原時間後嘗試建立 PITR 複本,系統會顯示以下錯誤訊息:

The timestamp for point-in-time recovery is after the latest recovery time of
Timestamp of latest recovery time. Clone the instance with a time
that's earlier than this recovery time.

取得最新的復原時間

對於可用的執行個體,您可以執行時間點復原至最新時間。如果執行個體無法使用,且執行個體記錄儲存在 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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 為要復原的執行個體開啟「更多動作」選單 更多動作圖示。,然後按一下「建立複本」
  3. 您可以選擇在「Create a clone」(建立本機複本) 頁面中,更新新本機複本的 ID。
  4. 選取「從過去時間點複製資料」
  5. 輸入 PITR 時間。
  6. 按一下 [建立本機複本]

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 要還原至的時間點

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 要還原至的時間點

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 為要停用的執行個體開啟「更多動作」選單 更多動作圖示。,然後選取「編輯」
  3. 展開「自訂執行個體」下方的「資料保護」專區。
  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 回應:

檢查 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 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:執行個體會在 Cloud Storage 中儲存用於 PITR 的交易記錄。

將交易記錄儲存空間切換至 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 的疑難排解,瞭解可能的後續步驟。

設定交易記錄保留期限

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 針對要設定交易記錄的執行個體,開啟「更多動作」選單 更多動作圖示。,然後選取「編輯」
  3. 展開「自訂執行個體」下方的「資料保護」專區。
  4. 在「啟用時間點復原」專區中,展開「進階選項」
  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 回應:

疑難排解

問題 疑難排解

argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z

Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,

您提供的時間戳記無效。

HTTP Error 400: Successful backup required for carrying out the operation was not found.

Successful backup required for carrying out the operation was not found. or Time where no backups can be found.

您提供的時間戳記是備份時間,或找不到 binlog 座標的時間。

排解切換至 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. 請確認您是在 Cloud SQL for MySQL 或 Cloud SQL for PostgreSQL 執行個體上執行 gcloud CLI 指令或提出 API 要求。Cloud SQL for SQL Server 不支援使用 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 所用的交易記錄儲存位置中的指令。

後續步驟