在 Google Cloud 控制台中建立新執行個體時,系統會自動啟用自動備份和時間點復原 (PITR)。如要為現有執行個體設定 PITR,請按照下列步驟操作:
啟用 PITR
在 Google Cloud 控制台中建立新執行個體時,系統會自動啟用「自動備份」和「啟用時間點復原」。以下程序會在現有主要執行個體上啟用 PITR。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 開啟要啟用 PITR 的執行個體更多動作選單
,然後按一下「編輯」。 - 展開「自訂執行個體」下方的「資料保護」專區。
- 勾選「啟用時間點復原」核取方塊。
- 在「記錄天數」欄位中,輸入要保留記錄的天數。如果是 Cloud SQL Enterprise Plus 版本,天數範圍為 1 到 35 天;如果是 Cloud SQL Enterprise 版本,天數範圍為 1 到 7 天。
- 按一下 [儲存]。
gcloud
- 顯示執行個體總覽:
gcloud sql instances describe INSTANCE_NAME
- 如果「
enabled: false」部分顯示在「backupConfiguration」部分,請啟用定期備份: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-bin-log
如要在主要執行個體上啟用 PITR,也可以新增下列參數,設定要保留交易記錄的天數:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS - 確認變更:
gcloud sql instances describe INSTANCE_NAME
在「
backupConfiguration」部分,您會看到binaryLogEnabled: true,表示變更成功。
Terraform
如要啟用 PITR,請使用 Terraform 資源。
套用變更
如要在 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 控制台中,前往 UI 中的資源,確認 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,
"binaryLogEnabled": true
}
}
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:您要設定高可用性的主要或讀取備用資源執行個體名稱
- START_TIME:時間 (以小時和分鐘為單位)
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
JSON 要求主體:
{
"settings":
{
"backupConfiguration":
{
"startTime": "START_TIME",
"enabled": true,
"binaryLogEnabled": true
}
}
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
停用 PITR
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 找到要停用的執行個體,開啟更多動作選單
,然後選取「編輯」。 - 展開「自訂執行個體」下方的「資料保護」專區。
- 清除「啟用時間點復原」。
- 按一下 [儲存]。
gcloud
- 停用時間點復原功能:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-bin-log
- 確認您的變更:
gcloud sql instances describe INSTANCE_NAME
在「
backupConfiguration」部分,您會看到binaryLogEnabled: 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,
"binaryLogEnabled": 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,
"binaryLogEnabled": false
}
}
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
設定交易記錄保留期限
如要設定二進位記錄保留天數,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。
- 找到要設定交易記錄的執行個體,開啟更多動作選單
,然後選取「編輯」。 - 展開「自訂執行個體」下方的「資料保護」專區。
- 在「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 執行個體儲存交易記錄的位置,這些記錄用於時間點復原。
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 MYSQL_8_0 us-central-1 DISK my_02 MYSQL_8_0 us-central-1 CLOUD_STORAGE ...
在指令輸出中,「transactionalLogStorageState」欄位或「TRANSACTIONAL_LOG_STORAGE_STATE」欄會提供例項的 PITR 交易記錄儲存位置資訊。交易記錄可能有的儲存狀態如下:
DISK:執行個體會將用於時間點復原的交易記錄儲存在磁碟上。如果將 Cloud SQL Enterprise 版執行個體升級為 Cloud SQL Enterprise Plus 版,升級程序會自動將記錄儲存位置切換至 Cloud Storage。詳情請參閱使用就地升級功能,將執行個體升級為 Cloud SQL Enterprise Plus 版本。您也可以選擇使用 gcloud CLI 或 Cloud SQL Admin API 切換儲存空間位置,無需升級執行個體版本,也不會造成任何停機時間。詳情請參閱「將交易記錄儲存空間切換至 Cloud Storage」。SWITCHING_TO_CLOUD_STORAGE:執行個體會將時間點復原 (PITR) 交易記錄的儲存位置切換至 Cloud Storage。SWITCHED_TO_CLOUD_STORAGE:執行個體已完成將 PITR 交易記錄的儲存位置從磁碟切換至 Cloud Storage。CLOUD_STORAGE:執行個體會將用於 PITR 的交易記錄儲存在 Cloud Storage 中。
將交易記錄儲存空間切換至 Cloud Storage
如果執行個體將用於 PITR 的交易記錄儲存在磁碟上,您可以將儲存位置切換至 Cloud Storage,不會造成任何停機時間。切換儲存位置的整體程序大約需要交易記錄保留期限 (天數) 才能完成。開始切換後,交易記錄就會開始在 Cloud Storage 中累積。作業期間,您可以使用「檢查用於 PITR 的交易記錄儲存位置」中的指令,查看整體程序的狀態。
切換至 Cloud Storage 的整體程序完成後,Cloud SQL 會使用 Cloud Storage 中的交易記錄進行 PITR。
gcloud
如要將儲存位置切換為 Cloud Storage,請使用下列指令:
gcloud sql instances patch INSTANCE_NAME \ --switch-transaction-logs-to-cloud-storage
將 INSTANCE_NAME 替換為執行個體名稱。 執行個體必須是主要執行個體,不得為副本執行個體。 回覆內容大致如下:
The following message is used for the patch API method.
{"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"}
Patching Cloud SQL instance...done.
Updated
[https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
如果指令傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。執行個體必須是主要執行個體,不得為副本執行個體。
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
JSON 要求主體:
{
"switchTransactionLogsToCloudStorageEnabled": true
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
如果要求傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:專案 ID。
- INSTANCE_ID:執行個體 ID。執行個體必須是主要執行個體,不得為副本執行個體。
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
JSON 要求主體:
{
"switchTransactionLogsToCloudStorageEnabled": true
}
請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
如果要求傳回錯誤,請參閱「排解切換至 Cloud Storage 的問題」,瞭解可能的後續步驟。
切換後交易記錄檔的儲存位置和設定
為進行複製,Cloud SQL 仍會在磁碟上保留二進位記錄檔副本。
如要使用 mysqlbinlog 公用程式瀏覽二進位記錄,將二進位記錄儲存在磁碟上會很有幫助。
如果您在切換前,已在執行個體上設定 expire_logs_days 或 binlog_expire_logs_seconds 旗標,設定值會保持不變。
切換後,由於用於執行 PITR 的二進位記錄檔現在儲存在 Cloud Storage 中,請確保旗標的值反映您預期的磁碟交易記錄保留時間。Cloud SQL 只會保留磁碟上的記錄,保留期限為下列其中一個值的最小值:
- 切換前,請先檢查
transactionLogRetentionDaysPITR 設定。這項設定的預設值為 7 天。 - 您在執行個體上設定的
expire_logs_days或binlog_expire_logs_seconds旗標。
如要節省磁碟空間,切換程序完成後,請將 expire_logs_days 或 binlog_expire_logs_seconds 旗標的值設為 1 天,以減少分配的磁碟大小和磁碟儲存成本。如要進一步瞭解交易記錄儲存空間和 PITR,請參閱「Log storage for PITR」。
如要進一步瞭解如何檢查磁碟用量,請參閱「記錄和磁碟用量」。
排解切換至 Cloud Storage 的相關問題
下表列出將交易記錄的儲存位置從磁碟切換至 Cloud Storage 時,INVALID REQUEST 程式碼可能傳回的錯誤。
| 問題 | 疑難排解 |
|---|---|
Switching the storage location of the transaction logs
used for PITR is not supported for instances with database type %s.
|
請確認您是在 MySQL 適用的 Cloud SQL 或 PostgreSQL 適用的 Cloud SQL 執行個體上,執行 gcloud CLI 指令或發出 API 要求。Cloud SQL for SQL Server 不支援使用 gcloud CLI 或 Cloud SQL Admin API 切換交易記錄的儲存位置。 |
MySQL transactional logging is not enabled on this instance.
|
MySQL 使用二進位記錄做為交易記錄,以執行時間點復原 (PITR)。如要支援 PITR,MySQL 必須在執行個體上啟用二進位檔記錄。如要進一步瞭解如何啟用二進位檔記錄,請參閱「啟用 PITR」。 |
This command is not supported on replica instances.
Run the command on the primary instance instead.
|
執行指令或發出 API 要求時,請務必指定主要執行個體。 |
This instance is already storing transaction logs used for PITR in
Cloud Storage
|
如要驗證交易記錄的儲存位置,請在「檢查用於 PITR 的交易記錄儲存位置」中執行指令。 |
The instance is already switching transaction logs used for PITR from disk
to Cloud Storage.
|
等待切換作業完成。 如要驗證作業狀態和交易記錄的儲存位置,請在「檢查用於 PITR 的交易記錄儲存位置」中執行指令。 |
後續步驟
- 在副本上設定旗標