共用方式為


使用 Azure PowerShell 備份 PostgreSQL 資料庫

本文說明如何使用 Azure PowerShell 來備份 適用於 PostgreSQL 的 Azure 資料庫 。 您也可以使用適用於 PostgreSQL 資料庫的 Azure 入口網站Azure CLIREST API 來設定備份。

深入瞭解在適用於 PostgreSQL 的 Azure 資料庫中備份 PostgreSQL 資料庫的 支援案例常見問題

建立備份保存庫

備份保存庫是 Azure 中的記憶體實體。 它會儲存 Azure 備份支援的各種新工作負載的備份數據,例如適用於 PostgreSQL 的 Azure 資料庫伺服器、Azure 磁碟和 Azure Blob。 保存可協助您組織備份資料,同時減輕管理負擔。 備份保存庫是以 Azure 的 Azure Resource Manager 模型為基礎,可提供增強功能來協助保護備份資料。

在您建立備份保存庫之前,請在保存庫中選擇資料的儲存體備援。 然後,繼續使用該儲存體備援和位置來建立備份保存庫。

在本文中,您會在資源群組 TestBkpVault底下的區域westus建立名為 testBkpVaultRG的備份保存庫。 使用 New-AzDataProtectionBackupVault 命令建立備份保存庫。 深入瞭解如何建立備份保存庫

$storageSetting = New-AzDataProtectionBackupVaultStorageSettingObject -Type LocallyRedundant/GeoRedundant -DataStoreType VaultStore
New-AzDataProtectionBackupVault -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Location westus -StorageSetting $storageSetting
$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault
$TestBKPVault | fl
ETag                :
Id                  : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/TestBkpVault
Identity            : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppIdentityDetails
IdentityPrincipalId :
IdentityTenantId    :
IdentityType        :
Location            : westus
Name                : TestBkpVault
ProvisioningState   : Succeeded
StorageSetting      : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.StorageSetting}
SystemData          : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SystemData
Tag                 : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppTrackedResourceTags
Type                : Microsoft.DataProtection/backupVaults

建立備份原則

建立保存庫之後,您可以建立備份原則來協助保護 PostgreSQL 資料庫。 您也可以 使用 REST API 建立 PostgreSQL 資料庫的備份原則

瞭解 PostgreSQL 備份原則

磁碟備份每天提供多個備份,Blob 備份是不含觸發程序的連續備份,PostgreSQL 備份則提供封存保護。 第一次傳送至保存庫的備份數據可以根據定義的規則或生命週期移至封存層。

在此內容中,下列階層可協助您瞭解 PostgreSQL 的備份原則物件:

  • 政策規則
    • 備份規則
      • 備份參數
        • 備份型態 (在此情況下為完整資料庫備份)
        • 初始資料存放區 (備份一開始到達的位置)
        • 觸發程式(如何觸發備份)
          • 排程
          • 預設標記準則 (將所有排程備份連結至保留規則的預設標籤)
    • 預設保留規則(預設會套用至初始資料存放區上所有備份的規則)

原則物件會定義觸發的備份類型、觸發方式(透過排程)、它們標記的內容、登陸位置(資料存放區),以及數據存放區中的數據生命週期。

PostgreSQL 的預設 PowerShell 物件會指出每周觸發 完整 備份。 備份會到達保險庫,在那裡儲存三個月。

如果您想要將封存層新增至原則,您必須決定數據何時會從保存庫移至封存、數據會保留在封存中多久,以及哪些排程備份應該標記為可封存。 您必須新增保留規則,以定義備份數據從保存庫數據存放區到封存資料存放區的生命週期。 保留規則也會定義備份數據在封存資料存放區中停留的時間長度。 然後,您必須新增標記,將排程備份標示為符合封存資格。

PowerShell 產生的物件如下所示:

  • 政策規則
    • 備份規則
      • 備份參數
        • 備份型態 (在此情況下為完整資料庫備份)
        • 初始資料存放區 (備份一開始到達的位置)
        • 觸發程式(如何觸發備份)
          • 排程
          • 預設標記準則 (預設標籤標,會將所有排程備份連結至保留規則)
          • 具有相同名稱之新保留規則的新標記準則
    • 預設保留規則(預設會套用至初始資料存放區上所有備份的規則)
    • 新的保留規則
      • 生命週期
        • 來源資料存放區
        • 來源資料存放區中刪除的時間週期
        • 複製到目標數據存放區

擷取原則範本

若要瞭解 PostgreSQL 資料庫備份備份備份原則的內部元件,請使用 Get-AzDataProtectionPolicyTemplate 命令擷取原則範本。 此命令會傳回數據源類型的默認原則範本。 使用此原則範本來建立新的原則。

$policyDefn = Get-AzDataProtectionPolicyTemplate -DatasourceType AzureDatabaseForPostgreSQL
$policyDefn | fl


DatasourceType : {Microsoft.DBforPostgreSQL/servers/databases}
ObjectType     : BackupPolicy
PolicyRule     : {BackupWeekly, Default}

$policyDefn.PolicyRule | fl


BackupParameter           : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType       : DataStoreInfoBase
DataStoreType             : VaultStore
Name                      : BackupWeekly
ObjectType                : AzureBackupRule
Trigger                   : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.ScheduleBasedTriggerCo
                            ntext
TriggerObjectType         : ScheduleBasedTriggerContext

IsDefault  : True
Lifecycle  : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.SourceLifeCycle}
Name       : Default
ObjectType : AzureRetentionRule

原則範本包含觸發程式(決定哪些觸發備份)和生命週期(決定何時刪除、複製或移動備份)。 在 PostgreSQL 資料庫備份中,觸發程序的預設值是排程的每週觸發程序 (每七天備份一次)。 每個備份都會保留三個月。

 $policyDefn.PolicyRule[0].Trigger | fl


ObjectType                    : ScheduleBasedTriggerContext
ScheduleRepeatingTimeInterval : {R/2021-08-22T02:00:00+00:00/P1W}
ScheduleTimeZone              : UTC
TaggingCriterion              : {Default}
$policyDefn.PolicyRule[1].Lifecycle | fl


DeleteAfterDuration        : P3M
DeleteAfterObjectType      : AbsoluteDeleteOption
SourceDataStoreObjectType  : DataStoreInfoBase
SourceDataStoreType        : VaultStore
TargetDataStoreCopySetting : {}

修改原則範本

修改排程

預設原則範本每週備份一次。 您可以修改備份的排程,將其改為每週提供多次備份。 若要變更排程,請使用 Edit-AzDataProtectionPolicyTriggerClientObject 命令。

下列範例會將每周備份修改為每周的星期日、星期三和星期五。 排程日期陣列會參照日期,設定為星期幾則視這些日期是星期幾而定。 也需將這些排程指定為每週重複一次。 因此,排程間隔為 1 ,而間隔類型為 Weekly

$schDates = @(
  (
    (Get-Date -Year 2021 -Month 08 -Day 15 -Hour 22 -Minute 0 -Second 0)
  ), 
  (
    (Get-Date -Year 2021 -Month 08 -Day 18 -Hour 22 -Minute 0 -Second 0)
  ),
  (
    (Get-Date -Year 2021 -Month 08 -Day 20 -Hour 22 -Minute 0 -Second 0)
  )
)
$trigger = New-AzDataProtectionPolicyTriggerScheduleClientObject -ScheduleDays $schDates -IntervalType Weekly -IntervalCount 1 
Edit-AzDataProtectionPolicyTriggerClientObject -Schedule $trigger -Policy $policyDefn   

新增保留規則

如果您想要新增封存保護,您必須修改原則範本。

默認範本具有預設保留規則下初始數據存放區的生命週期。 在此案例中,規則表示會在三個月後刪除備份資料。 您應該新增新的保留規則,以定義資料何時移至封存資料存放區。 也就是說,備份數據會先複製到封存資料存放區,然後在保存庫數據存放區中刪除。

此外,規則應該定義在封存資料存放區中保留數據的時間長度。 若要建立新的生命週期,請使用 New-AzDataProtectionRetentionLifeCycleClientObject 命令。 若要將這些生命週期與新的或現有的規則產生關聯,請使用 Edit-AzDataProtectionPolicyRetentionRuleClientObject 命令。

下列範例會建立名為 Monthly的新保留規則。 在此規則中,每月的第一個成功備份會保留在保存庫中六個月,然後移至封存層並在封存層中保留 24 個月。

$VaultToArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore VaultStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 6 -TargetDataStore ArchiveStore -CopyOption CopyOnExpiryOption

$OnArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore ArchiveStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 24

Edit-AzDataProtectionPolicyRetentionRuleClientObject -Policy $policyDefn -Name Monthly -LifeCycles $VaultToArchiveLifeCycle, $OnArchiveLifeCycleLifeCycle -IsDefault $false

新增標記和相關準則

建立保留規則之後,您必須在備份原則的 屬性中 Trigger 建立對應的標記。 若要建立新的標記準則,請使用 New-AzDataProtectionPolicyTagCriteriaClientObject 命令。 若要更新現有的標籤或建立新的標記,請使用 Edit-AzDataProtectionPolicyTagClientObject 命令。

下列範例會建立新的標記以及準則,這是月份的第一個成功備份。 標記會與要套用的對應保留規則具有相同名稱。

在此範例中,標籤準則名為 Monthly

$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -AbsoluteCriteria FirstOfMonth
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria

如果排程是每周多個備份(如上述範例中指定的每個星期日、星期三和星期四),而且您想要封存星期日和星期五備份,您可以變更標記準則,如下所示:

$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -DaysOfWeek @("Sunday", "Friday")
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria

建立新的 PostgreSQL 備份原則

根據需求修改範本之後,請使用 New-AzDataProtectionBackupPolicy 命令來使用修改過的範本來建立原則:

$polOss = New-AzDataProtectionBackupPolicy -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Name "TestOSSPolicy" -Policy $policyDefn

設定備份

建立保存庫和原則之後,您必須考慮三個關鍵點,以在適用於PostgreSQL的 Azure 資料庫中備份 PostgreSQL 資料庫。

瞭解重要實體

要備份的 PostgreSQL 資料庫

擷取要備份之 PostgreSQL 資料庫的 Resource Manager 識別符。 此標識碼可作為資料庫的標識碼。 下列範例會使用 PostgreSQL 伺服器底下名為 empdb11 的資料庫,該伺服器 testposgresql存在於不同訂用帳戶下的資源群組 ossrg 中:

$ossId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

金鑰保存庫

Azure 備份服務不會儲存連線到 PostgreSQL 資料庫所用的使用者名稱和密碼。 相反地,備份管理員會將 密鑰 植入金鑰保存庫。 Azure 備份服務接著會存取金鑰保存庫、讀取密鑰,以及存取資料庫。 請記下相關金鑰的祕密識別碼。

$keyURI = "https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

備份保存庫

您必須將備份保存庫連線到 PostgreSQL 伺服器,然後透過金鑰保存庫中存在的金鑰存取資料庫。 因此,備份保存庫需要存取 PostgreSQL 伺服器和密鑰保存庫。 存取權會授與備份保存庫的受控識別。

請閱讀您應向 PostgreSQL 伺服器和 Azure Key Vault (儲存資料庫金鑰的位置) 上備份保管庫受控識別授予適當權限 (部分內容可能是機器或 AI 翻譯)。

準備要求

設定所有相關許可權之後,請執行兩個步驟中的備份設定:

  1. Initialize-AzDataProtectionBackupInstance 命令中使用相關的保存庫、原則與 PostgreSQL 資料庫準備要求。
  2. 使用 New-AzDataProtectionBackupInstance 命令提交要求以備份資料庫。
$instance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureDatabaseForPostgreSQL -DatasourceLocation $TestBkpvault.Location -PolicyId $polOss[0].Id -DatasourceId $ossId -SecretStoreURI $keyURI -SecretStoreType AzureKeyVault
ConvertTo-Json -InputObject $instance -Depth 4 
New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $instance

Name                        Type                                         BackupInstanceName
----                        ----                                          ------------------
ossrg-empdb11       Microsoft.DataProtection/backupVaults/backupInstances ossrg-empdb11

執行隨選備份

使用 Get-AzDataProtectionBackupInstance 命令擷取您需要觸發備份的相關備份實例:

$instance = Get-AzDataProtectionBackupInstance -SubscriptionId "xxxx-xxx-xxx" -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "BackupInstanceName"

您可以在觸發備份時指定保留規則。 若要檢視原則中的保留規則,請瀏覽原則物件。 在下列範例中,會顯示名稱 Default 為的規則。 本文使用隨選備份的範例規則。

$ossPol.PolicyRule | fl


BackupParameter           : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType       : DataStoreInfoBase
DataStoreType             : OperationalStore
Name                      : BackupHourly
ObjectType                : AzureBackupRule
Trigger                   : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.ScheduleBasedTriggerContext
TriggerObjectType         : ScheduleBasedTriggerContext

IsDefault  : True
Lifecycle  : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SourceLifeCycle}
Name       : Default
ObjectType : AzureRetentionRule

若要觸發隨選備份,請使用 Backup-AzDataProtectionBackupInstanceAdhoc 命令:

$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name
Backup-AzDataProtectionBackupInstanceAdhoc -BackupInstanceName $AllInstances[0].Name -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupRuleOptionRuleName "Default"

追蹤作業

使用 Get-AzDataProtectionJob 命令來追蹤所有作業。 您可以列出所有工作,並擷取特定的工作詳細資料。

您也可以使用 Az.ResourceGraph 來追蹤所有備份保存庫的所有作業。 使用Search-AzDataProtectionJobInAzGraph命令來擷取任何備份保存庫中的相關工作:

  $job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDisk -Operation OnDemandBackup