時間點復原 (PITR) 可讓您將 Cloud SQL 執行個體還原至特定時間點。這有助於復原遺失的資料,並還原非預期的變更或損毀。
PITR 需要自動備份。如要為現有執行個體設定 PITR,請啟用或停用這項功能,並調整交易記錄保留期限。
事前準備
開始之前,請先詳閱下列事項:
- 如果您在現有執行個體上啟用 PITR,執行個體會重新啟動。
- 在 Google Cloud 控制台建立 Cloud SQL Enterprise 版本執行個體時,系統預設會啟用 PITR。如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API,則必須手動啟用這項功能。
- 無論採用何種方法,建立 Cloud SQL Enterprise Plus 版執行個體時,系統預設會啟用 PITR。如要停用這項功能,則必須手動操作。
- 在 Google Cloud 控制台建立執行個體時,系統預設會啟用自動備份。如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API,則必須手動啟用這項功能。
請確認 SQL Server 適用的 Cloud SQL 執行個體中,所有資料庫在資料磁碟上都有不重複的實體檔案名稱。詳情請參閱「邏輯和實體檔案」。如要偵測這項問題,請執行下列 T-SQL 查詢:
SELECT d.name AS DatabaseName, mf.physical_name FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE mf.type = 0 AND mf.file_id = 1;如果查詢傳回兩個以上的資料庫,且
physical_name欄位的值相同,請完成下列步驟:
啟用 PITR
下列程序會在現有主要執行個體上啟用 PITR。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 針對要啟用時間點復原功能的執行個體,開啟「更多動作」選單
,然後按一下「編輯」。 - 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
- 勾選「啟用時間點復原」核取方塊。
- 在「Days of logs」(記錄檔天數) 欄位中,輸入要保留記錄檔的天數。Cloud SQL Enterprise Plus 版本為 1 到 35 天,Cloud SQL Enterprise 版本則為 1 到 7 天。
- 按一下 [儲存]。
gcloud
- 顯示執行個體總覽:
gcloud sql instances describe INSTANCE_NAME
- 如果
backupConfiguration區段中顯示enabled: false,請啟用排定的備份:gcloud sql instances patch INSTANCE_NAME \ --backup-start-time=HH:MM
請使用 UTC±00 時區的 24 小時制指定
backup-start-time參數。 - 啟用 PITR:
gcloud sql instances patch INSTANCE_NAME \ --enable-point-in-time-recovery
如要在主要執行個體上啟用 PITR,您也可以新增下列參數,設定交易記錄的保留天數:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS - 確認變更:
gcloud sql instances describe INSTANCE_NAME
如果變更成功,
backupConfiguration區段會顯示pointInTimeRecoveryEnabled: true。
Terraform
如要啟用時間點復原功能,請使用 Terraform 資源。
為 Cloud SQL Enterprise Plus 版本啟用 PITR
使用下列 Terraform 程式碼範例,建立已啟用 PITR 的 Cloud SQL Enterprise Plus 版本執行個體:為 Cloud SQL Enterprise 版本啟用 PITR
使用下列 Terraform 程式碼範例,建立已啟用 PITR 的 Cloud SQL Enterprise 版本執行個體:套用變更
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每個專案只需執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,環境變數就會遭到覆寫。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須有
.tf副檔名,例如main.tf。在本教學課程中,這個檔案稱為main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在進行教學課程,可以複製每個章節或步驟中的程式碼範例。
將程式碼範例複製到新建立的
main.tf。您也可以從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 請查看並修改範例參數,以便套用至您的環境。
- 儲存變更。
-
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請視需要加入
-upgrade選項:terraform init -upgrade
套用變更
-
查看設定,確認 Terraform 要建立或更新的資源符合預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes,套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。
刪除變更
如要刪除變更,請按照下列步驟操作:
- 如要停用防刪除功能,請在 Terraform 設定檔中將
deletion_protection引數設為false。deletion_protection = "false"
- 執行下列指令,並在提示中輸入
yes,套用更新後的 Terraform 設定:terraform apply
-
執行下列指令,並在提示中輸入
yes,移除先前使用 Terraform 設定套用的資源:terraform destroy
REST v1
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID: Google Cloud 專案的 ID 或專案編號,該專案包含執行個體
- 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: Google Cloud 專案的 ID 或專案編號,該專案包含執行個體
- 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 回覆:
停用 PITR
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 開啟要停用的執行個體的「更多動作」選單
,然後選取「編輯」。 - 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
- 取消勾選「啟用時間點復原」。
- 按一下 [儲存]。
gcloud
- 停用時間點復原功能:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-point-in-time-recovery
- 確認您的變更:
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 回覆:
設定交易記錄保留期限
如要設定交易記錄的保留天數,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 針對要設定交易記錄的執行個體,開啟「更多動作」選單
,然後選取「編輯」。 - 展開「Customize your instance」(自訂執行個體) 下方的「Data Protection」(資料保護) 專區。
- 在「Enable point-in-time recovery」(啟用時間點復原功能) 區段中,展開「Advanced options」(進階選項)。
- 輸入記錄保留天數:Cloud SQL Enterprise Plus 版本為 1 至 35 天,Cloud SQL Enterprise 版本為 1 至 7 天。
- 按一下 [儲存]。
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 回覆:
查看用於 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:執行個體會將用於 PITR 的交易記錄儲存在磁碟上。CLOUD_STORAGE:執行個體會將用於 PITR 的交易記錄儲存在 Cloud Storage。
後續步驟
- 在複製版本上設定旗標