執行時間點復原 (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. 按一下 [建立本機複本]。

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 還原時間點上限

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

使用 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 所在專案以外的專案。

只有透過 gcloud CLI 和 REST API,才能使用跨專案 PITR。

如要執行跨專案 PITR,請採取下列任一做法:

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

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

對無法使用的執行個體執行 PITR

控制台

基於下列原因,您可能需要將無法使用的執行個體復原至其他可用區:

  • 無法存取執行個體設定的可用區。這個執行個體處於 FAILED 狀態。
  • 執行個體維護中。這個執行個體處於 MAINTENANCE 狀態。

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

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

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

  2. 找出要複製的執行個體所在資料列。
  3. 在「Actions」(動作) 欄中,按一下 「More Actions」(更多動作) 選單。
  4. 按一下 [建立本機複本]。
  5. 在「Create a clone」(建立複製版本) 頁面中,完成下列操作:
    1. 在「Instance ID」(執行個體 ID) 欄位中,視需要更新執行個體 ID。
    2. 按一下「Clone from an earlier point in time」(從過去時間點複製資料)。
    3. 在「Point in time」(時間點) 欄位中,選取要複製資料的日期和時間。這項作業會將執行個體復原為目標時間當下的狀態。
    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 和 cloudsql.instances.create 權限。如要進一步瞭解執行 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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.

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

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

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

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

gcloud

標準級備份

查看 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 還原已刪除的執行個體,請執行下列指令:

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 期間

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

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

刪除執行個體後,系統會將刪除執行個體的 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 期間

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

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

刪除執行個體後,系統會將刪除執行個體的 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/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.

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

後續步驟