使用時間點復原 (PITR)

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

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

如果您建立 Cloud SQL Enterprise Plus 版執行個體,系統會預設啟用 PITR,無論您使用哪種建立方法都一樣。如要停用這項功能,請手動操作。

如果您建立 Cloud SQL Enterprise 版執行個體,無論使用哪種建立方法,系統預設都會停用 PITR。在這種情況下,如要啟用這項功能,就必須手動操作。

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

我們已於 2024 年 5 月 31 日推出這項功能,可將時間點復原 (PITR) 的交易記錄儲存在 Cloud Storage。這項功能推出後,適用下列條件:

  • 在此日期前建立的 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 中,記錄會與主要執行個體儲存在相同區域。這項記錄儲存功能 (Cloud SQL Enterprise Plus 版本最多 35 天,Cloud SQL Enterprise 版本最多 7 天,時間點復原功能的最長期限) 不會為每個執行個體產生額外費用。

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,不必重新啟用。不過,減少儲存空間用量不會縮減為執行個體佈建的磁碟大小。
  • 系統每天會清除記錄一次,而非持續清除。將記錄保留期限設為兩天,表示系統會保留至少兩天的記錄,最多則為三天的記錄。建議將備份數量設為比記錄保留天數多一天。

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

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

時間點復原的資料庫復原模式

如果您在執行個體上啟用 PITR,Cloud SQL 會自動將現有和後續資料庫的復原模式設為完整復原模式。

如要進一步瞭解 SQL Server 復原模式,請參閱 Microsoft 說明文件

啟用 PITR

在 Google Cloud 控制台中建立新執行個體時,系統會自動啟用「自動備份」設定。

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 開啟要啟用 PITR 的執行個體更多動作選單 更多動作圖示。,然後按一下「編輯」
  3. 展開「自訂執行個體」下方的「資料保護」專區。
  4. 勾選「啟用時間點復原」核取方塊。
  5. 在「記錄天數」欄位中,輸入要保留記錄的天數。如果是 Cloud SQL Enterprise Plus 版本,天數範圍為 1 到 35 天;如果是 Cloud SQL Enterprise 版本,天數範圍為 1 到 7 天。
  6. 按一下 [儲存]

gcloud

  1. 顯示執行個體總覽:
    gcloud sql instances describe INSTANCE_NAME
  2. 如果「enabled: false」部分顯示在「backupConfiguration」部分,請啟用定期備份:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    請以 24 小時制指定 UTC±00 時區的 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 資源

為 Cloud SQL Enterprise Plus 版本啟用 PITR

使用下列 Terraform 程式碼範例,建立已啟用 PITR 的 Cloud SQL Enterprise Plus 版執行個體:
# Creates a SQL SERVER Enterprise Plus edition instance. Unless specified otherwise, PITR is enabled by default.
resource "google_sql_database_instance" "enterprise_plus" {
  name             = "sqlserver-enterprise-plus-instance-pitr"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_ENTERPRISE"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled = true
    }
  }
  # Setting the `deletion_protection` flag to true ensures you can't accidentally delete the instance
  # using Terraform. Setting the `deletion_protection_enabled` flag to true protects the instance at the
  # Google Cloud level.
  deletion_protection = false
}

為 Cloud SQL Enterprise 版啟用 PITR

使用下列 Terraform 程式碼範例,建立已啟用 PITR 的 Cloud SQL Enterprise 版執行個體:
# Creates a SQL SERVER Enterprise edition instance with PITR enabled. Unless specified otherwise,
# PITR is disabled by default.
resource "google_sql_database_instance" "enterprise" {
  name             = "sqlserver-enterprise-instance-pitr"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_ENTERPRISE"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier    = "db-custom-4-26624"
    edition = "ENTERPRISE"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Setting the `deletion_protection` flag to true ensures you can't accidentally delete the instance
  # using Terraform. Setting the `deletion_protection_enabled` flag to true protects the instance at the
  # Google Cloud 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. 執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

    terraform destroy

REST v1

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

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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:包含執行個體的專案 ID 或專案編號 Google Cloud
  • 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,您可以擷取最新的復原時間,並執行該時間點的復原作業。在這兩種情況下,您都可以提供偏好的區域值,將執行個體還原至其他主要或次要區域

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 Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 開啟要復原執行個體的更多動作選單 更多動作圖示。,然後按一下「建立副本」
  3. (選用) 在「建立副本」頁面中,更新新副本的 ID。
  4. 選取「從過去時間點複製資料」
  5. 輸入 PITR 時間。
  6. 選取「所有資料庫」,或指定資料庫名稱。
    如果指定資料庫名稱,只能選取一個。 根據預設,PITR 適用於所有資料庫。
  7. 按一下 [建立本機複本]

gcloud

使用 PITR 建立副本。

更改下列內容:

  • SOURCE_INSTANCE_NAME:要還原的執行個體名稱。
  • NEW_INSTANCE_NAME - 副本的名稱。
  • TIMESTAMP - 來源執行個體的世界標準時間時區,格式為 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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 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

如要判斷執行個體是否將 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 SQLSERVER_2019_STANDARD  us-central-1   DISK
my_02 SQLSERVER_2019_STANDARD  us-central-1   CLOUD_STORAGE
...
   

在指令輸出中,「transactionalLogStorageState」欄位或「TRANSACTIONAL_LOG_STORAGE_STATE」欄會提供例項的 PITR 交易記錄儲存位置資訊。交易記錄的可能儲存狀態如下:

  • DISK:執行個體會在磁碟上儲存用於時間點復原的交易記錄。
  • CLOUD_STORAGE:執行個體會將用於 PITR 的交易記錄儲存在 Cloud Storage 中。

設定交易記錄保留期限

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

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

疑難排解

問題 疑難排解

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 座標。

後續步驟