本頁面說明如何使用 AlloyDB Omni Kubernetes 運算子,備份及還原 AlloyDB Omni 資料。您必須具備基本知識,瞭解如何使用資訊清單檔案和 kubectl
指令列工具更新 Kubernetes 叢集。如要進一步瞭解如何在 Kubernetes 叢集上安裝及執行 AlloyDB Omni,請參閱「在 Kubernetes 上安裝 AlloyDB Omni」。
如要啟用 AlloyDB Omni 持續備份和復原功能,請為每個資料庫叢集建立備份方案。系統會根據 backupPlan
資源中定義的備份時間表進行備份。如果備份方案未定義備份排程,系統預設會每天執行持續備份。您可以在復原時間範圍內,以秒為單位還原或複製任何時間戳記的備份。
如要瞭解如何在非 Kubernetes 部署作業中備份及還原 AlloyDB Omni 資料,請參閱「為 AlloyDB Omni 設定 Barman」和「為 AlloyDB Omni 設定 pgBackRest」。
啟用及排定備份
為資料庫叢集建立備份方案資源時,系統會啟用持續備份功能。您必須為每個資料庫叢集建立 backupPlan
資源,才能為該叢集啟用持續備份功能。這項備份方案資源會定義下列參數:
AlloyDB Omni 運算子儲存備份的位置。可以是 Kubernetes 叢集本機,也可以是 Cloud Storage bucket。
可設定多個備份時間表,自動建立
full
、incremental
和differential
備份。您隨時可以暫停這項排程,包括在首次定義備份計畫時。如果備份方案已暫停,系統不會建立排定的備份,但您仍可手動建立備份。如未指定備份時間表,則預設為「0 0 * * *」,也就是每天午夜 (當地時間) 進行一次完整備份。
儲存備份的保留期限。最短可設為 1 天,最長則可設為 90 天。預設值為 14。
資料庫叢集可有多個備份計畫,每個計畫都有自己的名稱和設定。如果您為資料庫叢集建立多個 backupPlan
資源,且備份排程各不相同,則必須為每個備份資源定義專屬的備份位置。
建立在本機儲存備份的方案
如要啟用本機備份功能,請套用下列資訊清單:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: BackupPlan
metadata:
name: BACKUP_PLAN_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupSchedules:
full: "FULL_CRON_SCHEDULE"
differential: "DIFF_CRON_SCHEDULE"
incremental: "INCR_CRON_SCHEDULE"
backupRetainDays: RETENTION_DAYS
paused: PAUSED_BOOLEAN
更改下列內容:
BACKUP_PLAN_NAME
:這個備份方案資源的名稱,例如backup-plan-1
。NAMESPACE
:此備份計畫的 Kubernetes 命名空間。必須與資料庫叢集的命名空間相符。DB_CLUSTER_NAME
:資料庫叢集的名稱,這是您建立時指派的名稱。FULL_CRON_SCHEDULE
:建立完整備份的備份時間表,其中包含所有資料,並以cron
格式表示。舉例來說,設為「0 0 * * 0」即可在每週日 00:00 進行完整備份。DIFF_CRON_SCHEDULE
:備份排程,用於建立初始完整備份。後續備份作業會根據資料的間隔變更 (以cron
格式表示) 進行差異備份。舉例來說,設為「0 22 * * 3」即可在每週三 22:00 執行差異備份。INCR_CRON_SCHEDULE
:備份排程,用於建立備份,其中包含自上次完整、差異或增量備份後變更的資料。格式為cron
。舉例來說,設為「0 21 * * *」即可每天 21:00 進行增量備份。RETENTION_DAYS
:AlloyDB Omni Operator 保留這項備份的天數。必須是介於1
和90
之間的整數。預設值為14
。PAUSED_BOOLEAN
:指定備份方案是否已暫停。請提供下列其中一個值:true
:備份作業已暫停,系統不會建立排定的備份。false
:AlloyDB Omni 運算子會根據cronSchedule
指定的排程建立備份。如果未明確設為true
,則這是預設值。
預設值為
false
。
建立將備份儲存在 Cloud Storage 的方案
如要啟用備份功能,並將備份檔儲存在 Cloud Storage,請按照下列步驟操作:
建立 Cloud Storage bucket。請記下您指派給這個 bucket 的名稱,後續步驟會用到。
建立服務帳戶,將備份檔新增至值區。
將
storage.objectAdmin
Identity and Access Management 角色授予服務帳戶。為服務帳戶建立金鑰。這會將私密金鑰下載至本機環境。
將下載的金鑰檔案重新命名為
key.json
。建立包含私密金鑰的 Kubernetes 密鑰:
kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE
更改下列內容:
:您要建立的 Kubernetes Secret 名稱,例如
gcs-key
。SECRET_NAME
KEY_PATH
:您在上一個步驟下載的key.json
檔案本機檔案系統路徑。NAMESPACE
:資料庫叢集的命名空間。
套用下列資訊清單:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: BACKUP_PLAN_NAME namespace: NAMESPACE spec: dbclusterRef: DB_CLUSTER_NAME backupSchedules: full: "FULL_CRON_SCHEDULE" differential: "DIFF_CRON_SCHEDULE" incremental: "INCR_CRON_SCHEDULE" backupRetainDays: RETENTION_DAYS paused: PAUSED_BOOLEAN backupLocation: type: GCS gcsOptions: bucket: BUCKET_URL key: BACKUP_PATH secretRef: name: SECRET_NAME namespace: NAMESPACE
更改下列內容:
BACKUP_PLAN_NAME
:這個備份方案資源的名稱,例如backup-plan-1
。NAMESPACE
:此備份計畫的 Kubernetes 命名空間。必須與資料庫叢集的命名空間相符。DB_CLUSTER_NAME
:資料庫叢集的名稱,這是您建立時指派的名稱。FULL_CRON_SCHEDULE
:建立完整備份的備份時間表,其中包含所有資料,並以cron
格式表示。舉例來說,設為「0 0 * * 0」即可在每週日 00:00 進行完整備份。DIFF_CRON_SCHEDULE
:備份排程,用於建立初始完整備份。後續備份作業會根據資料的間隔變更 (以cron
格式表示) 進行差異備份。舉例來說,設為「0 22 * * 3」即可在每週三 22:00 執行差異備份。INCR_CRON_SCHEDULE
:備份排程,用於建立備份,其中包含自上次完整、差異或增量備份後變更的資料。格式為cron
。舉例來說,設為「0 21 * * *」即可每天 21:00 進行增量備份。RETENTION_DAYS
:AlloyDB Omni Operator 保留這項備份的天數。必須是介於1
和90
之間的整數。預設值為14
。PAUSED_BOOLEAN
:指定備份方案是否已暫停。請提供下列其中一個值:true
:備份作業已暫停,系統不會建立排定的備份。false
:AlloyDB Omni 運算子會根據cronSchedule
指定的排程建立備份。如果未明確設為true
,則這是預設值。
預設值為
false
。
BUCKET_URL
:您在先前步驟中建立的 Cloud Storage bucket 名稱。這不是 bucket 的完整網址,請勿在 bucket 名稱加上gs://
前置字串。BACKUP_PATH
:AlloyDB Omni 運算子在 Cloud Storage 值區中寫入備份的目錄路徑。路徑必須是絕對路徑,開頭為/
。SECRET_NAME
:您在先前步驟中建立的 Kubernetes 密鑰名稱。
手動建立備份
您可以隨時手動建立備份資源,方法是使用已套用至資料庫叢集的任何備份方案。AlloyDB Omni 運算子會將所選備份方案的儲存位置和保留期限套用至新的手動備份。
如要手動建立備份,請套用下列資訊清單:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
name: BACKUP_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupPlanRef: BACKUP_PLAN_NAME
manual: true
physicalBackupSpec:
backupType: BACKUP_TYPE
更改下列內容:
BACKUP_NAME
:這個備份的名稱,例如backup-1
。NAMESPACE
:這次還原作業的 Kubernetes 命名空間。必須與資料庫叢集的命名空間相符。BACKUP_PLAN_NAME
:備份方案資源的名稱,這個備份作業屬於該資源。必須與您建立備份方案時選擇的名稱相符。DB_CLUSTER_NAME
:資料庫叢集的名稱,這是您建立時指派的名稱。BACKUP_TYPE
:指定要建立的手動備份類型。請選擇下列其中一個值:full
:建立包含所有資料的完整備份。diff
:建立差異備份,這類備份會依據上次的完整備份。後續備份作業會根據資料期間的變更進行差異備份。incr
:建立增量備份,其中包含上次完整或差異備份後變更的資料,因此需要先執行完整或差異備份。
監控及列出備份
備份計畫和備份內容都是 Kubernetes 叢集中的資源。如要查看相關資訊,請使用 kubectl
get
指令。
查看備份方案摘要
如要查看資料庫叢集的備份計畫相關資訊,請執行下列指令:
kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE
將 NAMESPACE
替換為資料庫叢集的命名空間。
輸出結果會與下列內容相似:
NAME PHASE LASTBACKUPTIME NEXTBACKUPTIME
backup-plan-prod Ready 2023-10-26T17:26:43Z 2023-10-27T00:00:00Z
查看備份清單
如要查看資料庫叢集可用的備份清單,請執行下列指令:
kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE
將 NAMESPACE
替換為資料庫叢集的命名空間。
輸出結果會與下列內容相似:
NAME PHASE COMPLETETIME TYPE
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z full
manual-backup-1 Succeeded 2023-10-26T18:15:27Z full
manual-backup-2 InProgress full
輸出表格中的每一列都代表備份資源,並具有下列屬性:
- 備份名稱。
- 備份狀態,其中
Succeeded
表示備份已可供還原。 - 備份的建立時間戳記。
從備份還原
AlloyDB 可讓您從個別備份還原資料,或使用特定時間點的備份來複製叢集。
從具名備份還原
如要從備份還原,並以備份中的資料取代資料庫叢集中的資料,請按照下列步驟操作。
列出階段為
Succeeded
的所有備份。kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded
將
NAMESPACE
替換為資料庫叢集的命名空間。如果至少有一個合適的備份候選項目,輸出內容會類似於下列內容:
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z manual-backup-1 Succeeded 2023-10-26T18:15:27Z
從上一個步驟列出的備份中,選擇要還原的備份。請記下名稱,以便在後續步驟中使用。
套用下列資訊清單:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME backup: BACKUP_NAME
更改下列內容:
RESTORE_NAME:要搭配這個資訊清單建立的資料還原資源使用的名稱,例如
restore-1
。DB_CLUSTER_NAME:資料庫叢集的名稱,這是您建立時指派的名稱。
BACKUP_NAME:您在上一步中選擇的備份名稱。
從某個時間點複製叢集
AlloyDB Omni Operator 可讓您在復原期間內,從任何時間點複製叢集資料。復原時間範圍的長度直接取決於保留期限。
舉例來說,如果保留期限設為 14 天,您就無法復原超過 14 天前的資料。您可以在復原時間範圍內,將資料還原至任何時間點。 AlloyDB Omni 運算子會將備份和記錄檔保留時間設為指定值加一天。
監控復原期間,找出還原時間點:
kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
以下是回應範例:
recoveryWindow: begin: "2024-01-31T02:54:35Z"
還原資源時會使用 RFC 3339 時間戳記格式的時間戳記值。
建立並套用下列還原資源資訊清單:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME pointInTime: "DATE_AND_TIME_STAMP" clonedDBClusterConfig: dbclusterName: NEW_DB_CLUSTER_NAME
更改下列內容:
RESTORE_NAME:要搭配這個資訊清單建立的資料還原資源使用的名稱,例如
restore-1
。DB_CLUSTER_NAME:資料庫叢集的名稱,這是您建立叢集時指派的名稱。
DATE_AND_TIME_STAMP:您要還原的連續備份時間戳記 (RFC 3339 格式,精確度達分鐘),例如
2024-03-05T15:32:10Z
。NEW_DB_CLUSTER_NAME:新資料庫叢集的名稱。
查看還原狀態
查看還原作業的進度:
kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE
將
NAMESPACE
替換為資料庫叢集的命名空間。如要持續執行指令,請加上
-Aw
旗標。輸出結果會與下列內容相似:
NAME PHASE COMPLETETIME RESTOREDPOINTINTIME restore-1 RestoreInProgress
如果輸出資料表中的
PHASE
欄值為ProvisionSucceeded
,表示還原作業已完成。查看還原或複製的資料庫叢集上線進度:
kubectl get dbclusters -A -n NAMESPACE
將
NAMESPACE
替換為資料庫叢集的命名空間。如要持續執行指令,請加上
-Aw
旗標。輸出結果會與下列內容相似:
NAMESPACE NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE default db-cluster-1 10.128.0.55 Ready DBClusterReady
如果輸出資料表中的
DBCLUSTERPHASE
資料欄值為DBClusterReady
,表示還原或複製的資料庫叢集已可供使用。
刪除備份
通常不需要手動刪除備份。AlloyDB Omni 運算子會自動刪除超過保留期限的備份,而保留期限是在建立備份方案時指定。
如要手動刪除備份,備份必須符合下列條件:
備份方案儲存的備份不只一個。AlloyDB Omni Operator 規定每個備份方案至少要有一個備份。
備份資料沒有其他備份資料依附。舉例來說,完整備份及其所依附的差異或增量備份;或是增量備份及其所依附的差異備份。
如要刪除備份,請執行下列指令:
kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE
更改下列內容:
BACKUP_NAME
:要刪除的備份名稱。NAMESPACE
:資料庫叢集的命名空間。
調整備份磁碟大小
如要調整 Kubernetes 叢集中儲存備份資料的本機磁碟大小,請完成下列步驟:
請依下列方式更新 DBCluster 資訊清單的
resources.disks
欄位:spec: primarySpec: resources: disks: - name: BACKUP_DISK size: 10Gi
將
BACKUP_DISK
替換為儲存備份的磁碟名稱。套用資訊清單,強制執行更新。
AlloyDB Omni 運算子會立即將更新後的規格套用至 DBCluster。
修改執行中資料庫叢集的備份磁碟時,會受到下列限制:
- 只有在指定的
storageClass
支援磁碟區擴充時,您才能增加磁碟大小。 - 無法縮減磁碟大小。
更新備份方案
每個備份計畫都是 Kubernetes 資源。如要更新設定,請執行下列其中一項操作:
編輯並重新套用備份方案的資訊清單檔案。
使用
kubectl patch
指令。
舉例來說,如要暫停執行中的備份方案,請將資訊清單的 paused
屬性變更為 true
,然後重新套用資訊清單。
刪除備份方案
如要刪除備份方案並移除所有備份資源,請執行下列指令:
kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE
更改下列內容:
BACKUP_PLAN_NAME
:要刪除的備份方案名稱。NAMESPACE
:資料庫叢集的命名空間。
如要暫停備份方案,但不要刪除,請將備份方案資源的 paused
屬性設為 true
。暫停的備份方案仍會儲存備份,並允許手動建立備份。