執行時間點復原 (PITR)

無論主要 Cloud SQL 執行個體是否處於運作狀態或已刪除,您都可以使用時間點復原 (PITR) 功能還原執行個體。您可以使用 PITR 將執行個體還原至特定時間點。如果執行個體已刪除,您可以將執行個體還原至特定時間點,並還原至新的或現有的執行個體。

Cloud SQL 提供下列選項,可使用 PITR 還原執行個體:

如要在無法使用或已刪除的執行個體上執行 PITR,您需要找出最新和最早的復原時間

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

使用 backup vault 執行 PITR

如果 Cloud SQL 執行個體已啟用強化備份,您可以使用備份保存庫對執行個體執行時間點復原。

控制台

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

    前往 Cloud SQL 執行個體

  2. 找到要復原的執行個體,開啟更多動作選單 更多動作圖示。,然後按一下「建立副本」

  3. 選取「從過去時間點複製資料」

  4. 輸入 PITR 時間。

  5. 按一下 [建立本機複本]

gcloud

如要對備份保存庫中的執行個體執行 PITR,您需要找出最接近要執行 PITR 時間的備份 data-source。如要尋找備份,請參閱「列出執行個體備份保存庫中的所有備份」。找出備份後,請執行下列指令來執行 PITR:

gcloud sql instances point-in-time-restore DATA_SOURCE
PITR_TIMESTAMP
--project=TARGET_PROJECT

更改下列內容:

  • DATA_SOURCE:最接近要復原時間點的備份 data-source 路徑。
  • PITR_TIMESTAMP:您要將執行個體還原至的時間點復原 (PITR) 記錄檔的世界標準時間時間戳記,格式為 RFC 3339。例如:2012-11-15T16:19:00.094Z。
  • TARGET_PROJECT:Cloud SQL 執行個體的專案 ID。

REST v1

REST v1beta4

對已刪除的執行個體執行 PITR

如要使用 PITR 復原已刪除的執行個體,您需要:

  • 您要將執行個體還原至的時間點復原時間戳記 (timestamp)
  • 目標執行個體名稱
  • 來源執行個體遭刪除的時間 (source-instance-deletion-time)

您只能使用 gcloud CLI 或 Cloud SQL API,對已刪除的執行個體執行 PITR。詳情請參閱「使用 PITR 還原已刪除的執行個體」。

gcloud

找出 PITR 視窗

如要找出已刪除執行個體的 PITR 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行 PITR。

找出來源執行個體的刪除時間和記錄保留天數

刪除執行個體後,系統會將 source-instance-deletion-timelog-retention-days 儲存在保留的備份中。如要尋找已刪除執行個體的這些值,請參閱「列出保留的備份」。

使用 PITR 還原

如要使用 PITR 還原已刪除的執行個體,請執行下列指令:

gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time='PITR_TIMESTAMP' \
--source-instance-deletion-time=SOURCE_INSTANCE_DELETION_TIMESTAMP

更改下列內容:

  • SOURCE_INSTANCE_NAME:要還原的來源執行個體名稱。
  • NEW_INSTANCE_NAME:新執行個體的名稱。
  • PITR_TIMESTAMP:您要將執行個體還原至的時間點復原 (PITR) 記錄檔的世界標準時間時間戳記,格式為 RFC 3339。例如:2012-11-15T16:19:00.094Z。
  • SOURCE_INSTANCE_DELETION_TIMESTAMP:來源執行個體刪除時間的世界標準時間戳記,採用 RFC 3339 格式。例如:2012-11-15T16:19:00.094Z。

REST v1

找出 PITR 視窗

如要找出已刪除執行個體的 PITR 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行 PITR。

找出來源執行個體的刪除時間和記錄保留天數

刪除執行個體後,系統會將 source-instance-deletion-timelog-retention-days 儲存在保留的備份中。如要尋找已刪除執行個體的這些值,請參閱「列出保留的備份」。

使用 PITR 還原

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

  • project-id:專案 ID
  • target-instance-id:目標執行個體 ID
  • source-instance-id:來源執行個體 ID
  • source-instance-deletion-time:來源執行個體的刪除時間
  • 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",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}

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

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

REST v1beta4

找出 PITR 視窗

如要找出已刪除執行個體的 PITR 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行 PITR。

找出來源執行個體的刪除時間和記錄保留天數

刪除執行個體後,系統會將 source-instance-deletion-timelog-retention-days 儲存在保留的備份中。如要尋找已刪除執行個體的這些值,請參閱「列出保留的備份」。

使用 PITR 還原

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

  • project-id:專案 ID
  • target-instance-id:目標執行個體 ID
  • source-instance-id:來源執行個體 ID
  • source-instance-deletion-time:來源執行個體的刪除時間
  • 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",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}

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

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

取得最早和最晚的復原時間

對於可用的執行個體,您可以對執行個體時間點復原視窗中的任何時間戳記執行時間點復原。時間點復原作業的時間範圍從最早的復原時間開始,到最晚的復原時間結束。如果執行個體無法使用,且執行個體記錄儲存在 Cloud Storage 中,或是執行個體已刪除且已啟用時間點復原保留功能,則您可以擷取最早和最晚的復原時間,並對該時間範圍內的任何時間戳記執行時間點復原。在所有情況下,您都可以提供偏好的區域值,將執行個體還原至其他主要或次要區域

gcloud

無法使用的執行個體

如要取得最早和最晚可復原的 Cloud SQL 執行個體時間 (不適用於可用的執行個體),請執行下列指令:

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

更改下列內容:

  • INSTANCE_NAME:要尋找最新復原時間的執行個體名稱。

已刪除執行個體

如要取得可還原 Cloud SQL 刪除執行個體的最早和最晚時間,請執行下列指令:

gcloud sql instances get-latest-recovery-time INSTANCE_NAME
--source-instance-deletion-time='SOURCE_INSTANCE_DELETION_TIMESTAMP'

更改下列內容:

  • INSTANCE_NAME:要尋找最新復原時間的執行個體名稱。
  • SOURCE_INSTANCE_DELETION_TIMESTAMP:來源執行個體刪除時間的世界標準時間戳記,採用 RFC 3339 格式。例如:2012-11-15T16:19:00.094Z。

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",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

已刪除執行個體

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

  • PROJECT_ID:專案 ID
  • INSTANCE_NAME:要查詢最新復原時間的來源執行個體名稱
  • SOURCE_INSTANCE_DELETION_TIME:來源執行個體的刪除時間

HTTP 方法和網址:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

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

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

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "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",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

已刪除執行個體

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

  • PROJECT_ID:專案 ID
  • INSTANCE_NAME:要查詢最新復原時間的來源執行個體名稱
  • SOURCE_INSTANCE_DELETION_TIME:來源執行個體的刪除時間

HTTP 方法和網址:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

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

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

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

疑難排解

問題 疑難排解

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

後續步驟