無論主要 Cloud SQL 執行個體是否處於運作狀態或已刪除,您都可以使用時間點復原 (PITR) 功能還原執行個體。您可以使用 PITR 將執行個體還原至特定時間點。如果執行個體已刪除,您可以將執行個體還原至特定時間點,並還原至新的或現有的執行個體。
Cloud SQL 提供下列選項,可使用 PITR 還原執行個體:
如要在無法使用或已刪除的執行個體上執行 PITR,您需要找出最新和最早的復原時間。
使用時間戳記執行 PITR
建議使用時間戳記執行 PITR。Cloud SQL 會使用 mysqlbinlog 公用程式,將執行個體還原至特定時間點。如要進一步瞭解 mysqlbinlog 公用程式,請參閱 MySQL 參考說明文件。
如要完成下列工作,您必須具備以下條件:
- 針對執行個體啟用二進位檔記錄與備份,並具備從上次備份到您要由其恢復的事件之前的連續二進位檔記錄。詳情請參閱「啟用二進位檔記錄」。
- 定義復原點的時間戳記。這個時間戳記之後發生的事件不會反映在新執行個體中。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 找到要復原的執行個體,開啟更多動作選單
,然後按一下「建立副本」。 - (選用) 在「建立副本」頁面中,更新新副本的 ID。
- 選取「從過去時間點複製資料」。
- 輸入 PITR 時間。
- 按一下 [建立本機複本]。
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 執行個體已啟用強化備份,您可以使用備份保存庫對執行個體執行時間點復原。
控制台
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
找到要復原的執行個體,開啟更多動作選單
,然後按一下「建立副本」。選取「從過去時間點複製資料」。
輸入 PITR 時間。
按一下 [建立本機複本]。
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
控制台
您可能需要將無法使用的執行個體復原到其他可用區,原因如下:
- 無法存取執行個體設定的可用區。這個執行個體處於
FAILED狀態。 - 執行個體正在維護中。這個執行個體處於
MAINTENANCE狀態。
如要復原無法使用的執行個體,請完成下列步驟:
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 找出要複製的執行個體列。
- 在「動作」欄中,按一下「更多動作」選單 。
- 按一下 [建立本機複本]。
- 在「建立副本」頁面中,完成下列動作:
- 在「Instance ID」(執行個體 ID) 欄位中,視需要更新執行個體 ID。
- 按一下「從過去時間點複製資料」。
- 在「時間點」欄位中,選取要複製資料的日期和時間。這項作業會將執行個體復原為目標時間當下的狀態。
- 按一下 [建立本機複本]。
複製作業初始化時,系統會將您帶回執行個體清單頁面。
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_ID:來源執行個體 ID
- TARGET_INSTANCE_ID:目標執行個體 ID
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
JSON 要求主體:
{
"cloneContext":
{
"destinationInstanceName": "TARGET_INSTANCE_ID"
}
}請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
使用 instances.clone API 方法的使用者或服務帳戶必須具備 cloudsql.instances.clone 權限。如要進一步瞭解使用 API 方法所需的權限,請參閱 Cloud SQL 權限。
REST v1beta4
您可能需要將無法使用的執行個體復原到其他區域,因為執行個體設定所在的區域無法存取。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID
- SOURCE_INSTANCE_ID:來源執行個體 ID
- TARGET_INSTANCE_ID:目標執行個體 ID
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
JSON 要求主體:
{
"cloneContext":
{
"destinationInstanceName": "TARGET_INSTANCE_ID"
}
}請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 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.
對已刪除的執行個體執行 PITR
如要使用 PITR 復原已刪除的執行個體,您需要:
- 您要將執行個體還原至的時間點復原時間戳記 (
timestamp) - 目標執行個體名稱
- 來源執行個體遭刪除的時間 (
source-instance-deletion-time)
您只能使用 gcloud CLI 或 Cloud SQL API,對已刪除的執行個體執行 PITR。詳情請參閱「使用 PITR 還原已刪除的執行個體」。
gcloud
找出 PITR 視窗
如要找出已刪除執行個體的 PITR 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行 PITR。
找出來源執行個體的刪除時間和記錄保留天數
刪除執行個體後,系統會將 source-instance-deletion-time 和 log-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-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 視窗,請取得執行個體的最早和最晚復原時間。您可以在這個視窗中選取任何時間戳記,執行 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」一文所述,您也可以在二進位記錄檔中提供特定的二進位記錄位置或事件位置,執行 PITR。
如要進一步瞭解如何使用二進位檔記錄位置進行 PITR,請參閱使用二進位檔記錄進行 PITR。
事前準備
完成此工作之前,您必須已完成下列作業:
針對執行個體啟用二進位檔記錄與備份,並具備從上次備份到您要由其恢復的事件之前的連續二進位檔記錄。詳情請參閱「啟用二進位檔記錄」。
您必須先在磁碟上取得二進位記錄,才能瀏覽事件。如要查看磁碟上二進位記錄檔的保留期限長度,請參閱「記錄保留期限」。您無法使用
mysqlbinlog公用程式瀏覽儲存在 Cloud Storage 中的二進位記錄。二進位記錄檔名稱與您要將事件復原至的原始位置 (該事件與在其之後出現的所有事件都不會反映在新執行個體中)。詳情請參閱「識別二進位檔記錄位置」。
找出二進位記錄檔名稱和位置後,請使用二進位記錄檔事件位置執行 PITR。
找出復原位置
使用 MySQL 用戶端連線至要還原的執行個體。
如要這麼做,請使用 Cloud Shell 或本機用戶端電腦。詳情請參閱外部應用程式的連線選項。
顯示執行個體的二進位檔記錄檔:
SHOW BINARY LOGS;顯示最近的二進位記錄檔中的前 100 個事件:
SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' LIMIT 100;您可以調整要顯示的列數,但在您知道檔案有多大之前,請勿顯示檔案中的所有事件。顯示大量事件可能會影響系統效能。
如果找不到所需活動,請使用最後顯示的位置做為起點,搜尋下一組活動:
SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' FROM <POSITION> LIMIT 100;當您尋找的事件中標記有您要還原至的時間點時,請記錄其位置 (顯示為
Pos) 及二進位記錄檔的名稱。二進位記錄檔名稱和位置就是您用於 PITR 的值。
以下是 SHOW BINLOG EVENTS 指令的輸出範例:
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+ | mysql-bin.000011 | 4 | Format_desc | 88955285 | 120 | Server ver: 5.6.30-log, Binlog ver: 4 | | mysql-bin.000011 | 120 | Query | 88955285 | 211 | create database db1 | | mysql-bin.000011 | 211 | Query | 88955285 | 310 | use `db1`; CREATE TABLE t (c CHAR(20)) | | mysql-bin.000011 | 310 | Query | 88955285 | 381 | BEGIN | | mysql-bin.000011 | 381 | Table_map | 88955285 | 426 | table_id: 18 (db1.t) | | mysql-bin.000011 | 310 | Query | 88955285 | 381 | BEGIN | | mysql-bin.000011 | 426 | Write_rows | 88955285 | 464 | table_id: 18 flags: STMT_END_F | | mysql-bin.000011 | 464 | Xid | 88955285 | 495 | COMMIT /* xid=56 */ | | mysql-bin.000011 | 495 | Query | 88955285 | 566 | BEGIN | | mysql-bin.000011 | 566 | Table_map | 88955285 | 611 | table_id: 18 (db1.t) | | mysql-bin.000011 | 611 | Write_rows | 88955285 | 649 | table_id: 18 flags: STMT_END_F | | mysql-bin.000011 | 649 | Xid | 88955285 | 680 | COMMIT /* xid=57 */ | | mysql-bin.000011 | 680 | Query | 88955285 | 751 | BEGIN | | mysql-bin.000011 | 751 | Table_map | 88955285 | 796 | table_id: 18 (db1.t) | | mysql-bin.000011 | 796 | Write_rows | 88955285 | 834 | table_id: 18 flags: STMT_END_F | | mysql-bin.000011 | 834 | Xid | 88955285 | 865 | COMMIT /* xid=58 */ | | mysql-bin.000011 | 865 | Query | 88955285 | 977 | use `db1`; DROP TABLE `t` /* generated by server */ | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+ 16 rows in set (0.04 sec)
如要還原到上一個範例中以粗體顯示的 DROP TABLE 陳述式,請在 mysql-bin.000011 中使用 865 做為復原位置。DROP TABLE 陳述式與其後的所有作業都不會反映在新執行個體中。
使用二進位記錄事件位置執行 PITR
gcloud
使用
gcloud sql instances clone 指令,並加上 --bin-log-file-name 和 --bin-log-position
旗標。
-
使用二進位記錄檔名和復原位置建立新執行個體。
更改下列內容:
- SOURCE_INSTANCE_NAME:要還原的執行個體名稱。
- NEW_INSTANCE_NAME:複製項目的名稱。
- BINLOG_FILE_NAME:二進位記錄的名稱,例如
mysql-bin.187288。 - POSITION:要還原的二進位記錄位置,例如
50001356。
gcloud sql instances clone SOURCE_INSTANCE_NAME \ NEW_INSTANCE_NAME \ --bin-log-file-name="BINLOG_FILE_NAME" \ --bin-log-position=POSITION
舉例來說,
gcloud sql instances clone指令可能如下所示:gcloud sql instances clone instance1 \ instance1-clone \ --bin-log-file-name=mysql-bin.0000031 \ --bin-log-position=107 \
- 使用
clone指令傳回的作業 ID,檢查還原作業的狀態。gcloud sql operations describe OPERATION_ID
作業進行中時,系統會傳回
RUNNING狀態。作業完成後,會傳回DONE狀態。
REST v1
使用您識別的二進位記錄檔名和復原位置建立新執行個體:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- target-instance-id:目標執行個體 ID
- source-instance-id:來源執行個體 ID
- binary-log-file-name 二進位記錄檔的名稱
- binary-log-position 二進位記錄檔中的位置
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
JSON 要求主體:
{
"cloneContext":
{
"kind": "sql#cloneContext",
"destinationInstanceName": "target-instance-id",
"binLogCoordinates":
{
"kind": "sql#binLogCoordinates",
"binLogFileName": "binary-log-file-name",
"binLogPosition": "binary-log-position"
}
}
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
REST v1beta4
使用您識別的二進位記錄檔名和復原位置,建立新執行個體:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- target-instance-id:目標執行個體 ID
- source-instance-id:來源執行個體 ID
- binary-log-file-name 二進位記錄檔的名稱
- binary-log-position 二進位記錄檔中的位置
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",
"binLogCoordinates":
{
"kind": "sql#binLogCoordinates",
"binLogFileName": "binary-log-file-name",
"binLogPosition": "binary-log-position"
}
}
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 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"
}
疑難排解
| 問題 | 疑難排解 |
|---|---|
|
或
|
您提供的时间戳记无效。 |
|
或
|
您提供時間戳記的時間點無法找到備份或 binlog 座標。 |
後續步驟
- 在副本上設定旗標