本頁說明如何使用時間點復原 (PITR) 功能,還原主要 Cloud SQL 執行個體。
如要進一步瞭解 PITR,請參閱「時間點復原 (PITR)」。
如果您建立 Cloud SQL Enterprise Plus 版執行個體,系統會預設啟用 PITR,無論您使用哪種建立方法都一樣。如要停用這項功能,請手動操作。
如果您在 Trusted Cloud 控制台中建立 Cloud SQL Enterprise 版執行個體,系統預設會啟用 PITR。否則,如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API 建立執行個體,系統預設會停用 PITR。在這種情況下,如要啟用這項功能,就必須手動操作。
時間點復原功能的記錄檔儲存空間
Cloud SQL 會使用二進位記錄檔進行 PITR。我們已於 2023 年 8 月 11 日推出這項功能,可將時間點復原 (PITR) 的交易記錄儲存在 Cloud Storage。這項功能推出後,適用下列條件:
- 所有 Cloud SQL Enterprise Plus 版執行個體都會將用於 PITR 的二進位記錄檔儲存在 Cloud Storage 中。只有在 2024 年 4 月 1 日前從 Cloud SQL Enterprise 版本升級,且在 2023 年 8 月 11 日前啟用 PITR 的 Cloud SQL Enterprise Plus 版本執行個體,才會繼續將 PITR 的記錄儲存在磁碟。
在 2023 年 8 月 11 日前建立的 Cloud SQL Enterprise 版執行個體,如果已啟用 PITR,系統會繼續將 PITR 的記錄儲存在磁碟。
如果您在 2024 年 4 月 1 日後,將 Cloud SQL Enterprise 版執行個體升級至 Cloud SQL Enterprise Plus 版,且該執行個體將時間點復原 (PITR) 的交易記錄儲存在磁碟上,升級程序會為您將用於 PITR 的交易記錄儲存位置切換至 Cloud Storage。詳情請參閱使用就地升級功能將執行個體升級為 Cloud SQL Enterprise Plus 版本。
在 2023 年 8 月 11 日後建立的 Cloud SQL Enterprise 版執行個體,如果啟用 PITR,系統會將 PITR 用的記錄儲存在 Cloud Storage 中。
如要進一步瞭解如何檢查 PITR 使用的交易記錄儲存位置,請參閱「檢查 PITR 使用的交易記錄儲存位置」。
如果執行個體只將二進位記錄儲存在磁碟上,您可以使用 gcloud CLI 或 Cloud SQL Admin API,將用於 PITR 的交易記錄儲存位置從磁碟切換至 Cloud Storage,且不會造成任何停機時間。詳情請參閱「將交易記錄儲存空間切換為 Cloud Storage」。
記錄保留期限
Cloud SQL 會在 Cloud Storage 中保留交易記錄,最多保留時間為在 transactionLogRetentionDays
時間點復原設定中設定的值。Cloud SQL Enterprise Plus 版的值可介於 1 到 35 天,Cloud SQL Enterprise 版的值則可介於 1 到 7 天。如未設定這個參數的值,Cloud SQL Enterprise Plus 版執行個體的預設交易記錄保留期限為 14 天,Cloud SQL Enterprise 版執行個體則為 7 天。如要進一步瞭解如何設定交易記錄保留天數,請參閱「設定交易記錄保留天數」一文。
雖然執行個體會將用於 PITR 的二進位記錄檔儲存在 Cloud Storage 中,但執行個體也會在磁碟上保留少量重複的二進位記錄檔,以便將記錄檔複製到 Cloud Storage。根據預設,建立啟用 PITR 的執行個體時,執行個體會將 PITR 的二進位記錄檔儲存在 Cloud Storage 中。Cloud SQL 也會自動將 expire_logs_days
和 binlog_expire_logs_seconds
標記的值設為相當於一天。這表示磁碟上會保留一天的記錄。
對於儲存在磁碟、要切換至 Cloud Storage,或已切換至 Cloud Storage 的時間點復原 (PITR) 二進位記錄檔,Cloud SQL 會保留記錄檔,保留時間為下列任一設定的最小值:
transactionLogRetentionDays
備份設定expire_logs_days
或binlog_expire_logs_seconds
標記
如果二進位記錄檔儲存在磁碟上、正在切換至 Cloud Storage,或已切換至 Cloud Storage,Cloud SQL 就不會為這些旗標設定任何值。如果記錄檔儲存在磁碟上,修改這些旗標的值可能會影響 PITR 復原作業的行為,以及磁碟上儲存的記錄檔天數。將記錄儲存位置切換至 Cloud Storage 時,您無法修改旗標值。我們也不建議將任一旗標值設為 0
。詳情請參閱「設定資料庫標記」。
對於
啟用客戶管理加密金鑰 (CMEK) 的執行個體,二進位記錄檔會使用最新版本的 CMEK 加密。如要執行還原作業,您必須提供所有金鑰版本,這些版本在您為
retained-transaction-log-days
參數設定的天數內,都是最新版本。
記錄和磁碟用量
系統會定期產生記錄,並使用儲存空間。二進位記錄檔會與相關聯的自動備份一起自動刪除,這會在達到為 transactionLogRetentionDays
設定的值後發生。
如要瞭解二進位記錄檔使用的磁碟空間大小,請檢查執行個體的 bytes_used_by_data_type
指標。binlog
資料類型的值會傳回磁碟上記錄檔的大小。如果執行個體將用於 PITR 的交易記錄儲存在磁碟上,Cloud SQL 會每天從磁碟清除資料,以符合 transactionLogRetentionDays
PITR 設定,詳情請參閱「自動備份和交易記錄保留」。不過,如果將 expire_logs_days
或 binlog_expire_logs_seconds
旗標設為低於交易記錄保留天數的值,Cloud SQL 就會提早清除二進位記錄檔。
如果二進位記錄的大小導致執行個體發生問題:
- 檢查執行個體是否將記錄儲存在磁碟上。 您可以使用 gcloud CLI 或 Cloud SQL Admin API,將 Cloud SQL 用於 PITR 的記錄儲存位置從磁碟切換至 Cloud Storage,且不會發生停機情形。如果您使用的是 Cloud SQL Enterprise 版本,也可以升級至 Cloud SQL Enterprise Plus 版本,切換 PITR 記錄的儲存位置。
您可以增加執行個體儲存空間大小。不過,磁碟用量增加的二進位記錄大小可能是暫時的。
建議啟用 自動增加儲存空間,以免發生儲存空間不足的問題。
如要刪除記錄並回收磁碟儲存空間,可以停用 PITR,不必重新啟用。不過,減少使用的儲存空間不會縮減為執行個體佈建的磁碟大小。
系統每天會清除記錄一次,而非持續清除。將記錄保留時間設為兩天,表示系統會保留至少兩天的記錄,最多保留三天的記錄。建議將備份數量設為比記錄保留天數多一天。
舉例來說,如果您為
transactionLogRetentionDays
參數的值指定7
,則對於backupRetentionSettings
參數,請將retainedBackups
的數量設為8
。
如要進一步瞭解 PITR,請參閱「時間點復原 (PITR)」。
完成將交易記錄的儲存位置切換至 Cloud Storage 後,您可以減少 expire_logs_days
或 binlog_expire_logs_seconds
標記的值,釋出磁碟空間。如要查看切換狀態,請參閱「檢查用於 PITR 的交易記錄儲存位置」。如要讓磁碟提供額外的記錄 (例如使用 mysqlbinlog
公用程式瀏覽二進位記錄),請增加這些旗標的值。Cloud SQL 會在磁碟上保留二進位記錄,保留天數至少為交易記錄保留天數,或旗標設定的值。如要進一步瞭解切換後如何儲存時間點復原記錄,以及如何釋出磁碟空間,請參閱「切換至 Cloud Storage 後的記錄」。
啟用 PITR
在 Trusted Cloud 控制台中建立新執行個體時,系統會自動啟用「自動備份」和「啟用時間點復原」。以下程序會在現有主要執行個體上啟用 PITR。
控制台
-
前往 Trusted 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
請以 24 小時制指定 UTC±00 時區的
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 資源。
套用變更
如要在 Trusted Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Trusted 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!」訊息。
- 開啟 Trusted Cloud 專案即可查看結果。在 Trusted Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
刪除變更
如要刪除變更,請按照下列步驟操作:
- 如要停用防刪除功能,請在 Terraform 設定檔中將
deletion_protection
引數設為false
。deletion_protection = "false"
- 執行下列指令,並在提示中輸入
yes
,套用更新的 Terraform 設定:terraform apply
-
執行下列指令,並在提示中輸入
yes
,移除先前透過 Terraform 設定套用的資源:terraform destroy
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的專案 ID 或專案編號 Trusted Cloud
- 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:包含執行個體的專案 ID 或專案編號 Trusted Cloud
- 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
控制台
您可能想將無法使用的執行個體復原到其他可用區,原因如下:
- 無法存取執行個體設定的可用區。這個執行個體處於
FAILED
狀態。 - 執行個體正在維護中。這個執行個體處於
MAINTENANCE
狀態。
如要復原無法使用的執行個體,請完成下列步驟:
-
前往 Trusted 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.
取得最新恢復時間
如果執行個體可用,您可以執行時間點復原,還原至最新時間。如果執行個體無法使用,且執行個體記錄檔儲存在 Cloud Storage,您可以擷取最新的復原時間,並執行該時間點的復原作業。在這兩種情況下,您都可以提供偏好的區域值,將執行個體還原至其他主要或次要區域。
gcloud
取得最新時間,您可將無法使用的 Cloud SQL 執行個體還原至該時間點。
將 INSTANCE_NAME 替換為您要查詢的執行個體名稱。
gcloud sql instances get-latest-recovery-time INSTANCE_NAME
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", "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", "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z" }
使用時間戳記執行 PITR
建議使用時間戳記執行 PITR。Cloud SQL 會使用 mysqlbinlog
公用程式,將執行個體還原至特定時間點。如要進一步瞭解 mysqlbinlog
公用程式,請參閱 MySQL 參考說明文件。
如要完成下列工作,您必須具備以下條件:
- 針對執行個體啟用二進位檔記錄與備份,並具備從上次備份到您要由其恢復的事件之前的連續二進位檔記錄。詳情請參閱「啟用二進位檔記錄」。
- 定義復原點的時間戳記。這個時間戳記之後發生的事件不會反映在新執行個體中。
控制台
-
前往 Trusted 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 回應:
停用 PITR
控制台
-
前往 Trusted 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 回應:
檢查用於 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 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 只會將記錄保留在磁碟上,保留時間為下列其中一個值的最小值:
- 切換前
transactionLogRetentionDays
PITR 設定。這項設定的預設值為 7 天。 - 您在執行個體上設定的
expire_logs_days
或binlog_expire_logs_seconds
旗標。
如要節省磁碟空間,切換程序完成後,請將 expire_logs_days
或 binlog_expire_logs_seconds
旗標的值設為 1 天,以減少分配的磁碟大小和磁碟儲存成本。如要進一步瞭解交易記錄儲存空間和 PITR,請參閱「PITR 的記錄儲存空間」。
如要進一步瞭解如何檢查磁碟用量,請參閱「記錄和磁碟用量」。
設定交易記錄保留期限
如要設定二進位記錄檔的保留天數,請按照下列步驟操作:
控制台
-
前往 Trusted 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
雖然我們建議您使用時間戳記執行 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 回應:
疑難排解
問題 | 疑難排解 |
---|---|
或
|
您提供的时间戳记无效。 |
或
|
您提供時間戳記的時間點無法找到備份或 binlog 座標。 |
排解切換至 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 的交易記錄儲存位置」中執行指令。 |
後續步驟
- 在副本上設定旗標