執行時間點復原 (PITR)

無論主要 Cloud SQL 執行個體是否已刪除,您都可以使用時間點復原 (PITR) 功能還原。PITR 可讓您將執行個體還原至特定時間點。時間點復原一律會建立新的執行個體,您無法對現有的執行個體執行 PITR。

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

如要對無法使用或已刪除的執行個體執行 PITR,您必須找出最早和最晚的復原時間。

執行 PITR

控制台

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

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

  2. 開啟要復原的執行個體的「更多動作」選單 更多動作圖示。,然後按一下「建立複製版本」。
  3. (選用) 在「Create a clone」(建立複製版本) 頁面中,更新新複製版本的 ID。
  4. 選取「Clone from an earlier point in time」(從過去時間點複製資料)。
  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 執行個體已啟用進階備份功能,您可以使用備份 vault 執行執行個體的時間點復原作業。

控制台

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

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

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

  3. 選取「Clone from an earlier point in time」(從過去時間點複製資料)。

  4. 輸入 PITR 時間。

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

gcloud

如要從 backup vault 對執行個體執行 PITR,您必須找出最接近要執行 PITR 時間的備份 data-source。如要尋找備份,請參閱「列出執行個體 backup vault 中的所有備份」。找出備份後,請執行下列指令,執行時間點復原作業:

gcloud sql instances point-in-time-restore DATA_SOURCE \
    TARGET_INSTANCE_NAME \
    'PITR_TIMESTAMP' \
    --project=TARGET_PROJECT \
    --region=REGION

更改下列內容:

  • DATA_SOURCE:來源執行個體的 data-source 路徑,最接近您要復原的時間點復原時間戳記。
  • TARGET_INSTANCE_NAME:PITR 作業建立的新執行個體名稱。
  • PITR_TIMESTAMP:要還原執行個體的來源執行個體 PITR 記錄世界標準時間戳記,格式為 RFC 3339。例如 2025-11-15T16:19:00.094Z。
  • TARGET_PROJECT:新執行個體的專案 ID。
  • REGION:目標執行個體的區域。如果來源執行個體的資料來源位於多區域,則必須填寫這個欄位。目標執行個體區域必須與來源執行個體區域相同。

REST v1

如要使用備份保管庫中的資料來源執行時間點復原,請透過 POST 要求使用 instances.pointInTimeRestore 方法。

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

  • PROJECT_ID:要建立新執行個體的專案 ID。
  • DATASOURCE:要用於時間點還原作業的備份和災難復原資料來源。
  • PITR_TIMESTAMP:要還原執行個體的來源執行個體 PITR 記錄世界標準時間戳記,格式為 RFC 3339。例如 2012-11-15T16:19:00.094Z。
  • TARGET_INSTANCE_NAME:PITR 作業建立的執行個體名稱。
  • REGION:目標執行個體的區域。如果來源執行個體的資料來源位於多區域,則必須填寫這個欄位。目標執行個體區域必須與來源執行個體區域相同。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID:pointInTimeRestore

JSON 要求主體:

{
  "datasource": "DATASOURCE",
  "pointInTime": "PITR_TIMESTAMP",
  "targetInstanceName": "TARGET_INSTANCE_NAME",
  "region": "REGION"
}

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

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

REST v1beta4

如要使用備份保管庫中的資料來源執行時間點復原,請透過 POST 要求使用 instances.pointInTimeRestore 方法。

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

  • PROJECT_ID:要建立新執行個體的專案 ID。
  • DATASOURCE:要用於時間點還原作業的備份和災難復原資料來源。
  • PITR_TIMESTAMP:要還原執行個體的來源執行個體 PITR 記錄世界標準時間戳記,格式為 RFC 3339。例如 2012-11-15T16:19:00.094Z。
  • TARGET_INSTANCE_NAME:PITR 作業建立的執行個體名稱。
  • REGION:目標執行個體的區域。如果來源執行個體的資料來源位於多區域,則必須填寫這個欄位。目標執行個體區域必須與來源執行個體區域相同。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID:pointInTimeRestore

JSON 要求主體:

{
  "datasource": "DATASOURCE",
  "pointInTime": "PITR_TIMESTAMP",
  "targetInstanceName": "TARGET_INSTANCE_NAME",
  "region": "REGION"
}

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

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

執行跨專案 PITR

使用進階備份功能,您可以將 Cloud SQL 執行個體還原至來源執行個體或 backup vault 所在專案以外的專案。

跨專案 PITR 僅支援透過 gcloud CLI 和 REST API 執行。

如要執行跨專案 PITR,請執行下列任一操作:

  • 如果您使用 gcloud CLI,請將 --project 旗標設為要建立目標執行個體的專案。

  • 如果使用 REST API,請將 PROJECT_ID 欄位設為要建立目標執行個體的專案。

對已刪除的執行個體執行時間點復原

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

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

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

gcloud

標準級備份

找出 PITR 時間範圍

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

尋找來源執行個體刪除作業

刪除執行個體後,系統會將刪除執行個體的 source-instance-deletion-time 和 log-retention-days 與執行個體的保留備份一併儲存。如要查看已刪除執行個體的所有可用備份清單,請參閱「列出保留的備份」。

找出要使用的備份後,請執行 gcloud sql backups describe 指令,取得 source-instance-deletion-time。

使用 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。

進階級備份

找出 PITR 時間範圍

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

找出資料來源

刪除執行個體後,系統會將該執行個體的資料來源與保留的備份一併儲存。如要找出已刪除執行個體的這些值,請參閱「列出執行個體備份保管箱中的所有備份」。

使用 PITR 還原

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

gcloud sql instances point-in-time-restore DATA_SOURCE \
    TARGET_INSTANCE_NAME \
    'PITR_TIMESTAMP' \
    --project=TARGET_PROJECT \
    --region=REGION

更改下列內容:

  • DATA_SOURCE:備份的 data-source 路徑,最接近您要復原的時間點復原時間戳記。
  • TARGET_INSTANCE_NAME:PITR 作業建立的新執行個體名稱。
  • PITR_TIMESTAMP:要還原執行個體的來源執行個體 PITR 記錄世界標準時間戳記,格式為 RFC 3339。例如 2025-11-15T16:19:00.094Z。
  • TARGET_PROJECT:新執行個體的專案 ID。
  • REGION:目標執行個體的區域。如果來源執行個體的資料來源位於多區域,則必須填寫這個欄位。目標執行個體區域必須與來源執行個體區域相同。

REST v1

找出 PITR 時間範圍

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

查看來源執行個體刪除時間和記錄檔保留天數

刪除執行個體後,系統會將刪除執行個體的 source-instance-deletion-time 和 log-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) 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行時間點復原作業。

查看來源執行個體刪除時間和記錄檔保留天數

刪除執行個體後,系統會將刪除執行個體的 source-instance-deletion-time 和 log-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 回覆:

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

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

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.

您提供的時間戳記是備份或找不到二進位記錄檔座標的時間。

後續步驟