Aracılığıyla paylaş


Azure PowerShell kullanarak PostgreSQL veritabanlarını yedekleme

Bu makalede, Azure PowerShell kullanarak PostgreSQL için Azure Veritabanı'nı yedekleme işlemi açıklanmaktadır. PostgreSQL veritabanları için Azure portalı, Azure CLI ve REST API kullanarak da yedeklemeyi yapılandırabilirsiniz.

Desteklenen senaryolar ve PostgreSQL için Azure Veritabanı'nda PostgreSQL veritabanlarını yedeklemeye yönelik sık sorulan sorular hakkında daha fazla bilgi edinin.

Backup kasası oluşturma

Backup kasası, Azure'daki bir depolama varlığıdır. PostgreSQL için Azure Veritabanı sunucuları, Azure diskleri ve Azure blobları gibi Azure Backup'ın desteklediği çeşitli yeni iş yükleri için yedekleme verilerini depolar. Yedekleme kasaları, yedekleme verilerinizi düzenlemeye yardımcı olurken yönetim ek yükünü en aza indirir. Yedekleme kasaları, yedekleme verilerinin güvenliğini sağlamaya yardımcı olmak için gelişmiş özellikler sağlayan Azure Resource Manager modelini temel alır.

Backup kasası oluşturmadan önce kasadaki verilerin depolama yedekliliğini seçin. Ardından bu depolama yedekliliği ve konumuyla Backup kasasını oluşturmaya devam edin.

Bu makalede, TestBkpVault bölgesinde, kaynak grubunun westus altında, testBkpVaultRG adlı bir Backup kasası oluşturacaksınız. Backup kasası oluşturmak için New-AzDataProtectionBackupVault komutunu kullanın. Backup kasası oluşturma hakkında daha fazla bilgi edinin.

$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

Yedekleme ilkesi oluşturma

Kasa oluşturduktan sonra PostgreSQL veritabanlarının korunmasına yardımcı olmak için bir yedekleme ilkesi oluşturabilirsiniz. REST API kullanarak PostgreSQL veritabanları için bir yedekleme ilkesi de oluşturabilirsiniz.

PostgreSQL yedekleme ilkesini anlama

Disk yedekleme günde birden çok yedekleme sunarken ve blob yedekleme tetikleyicisi olmayan sürekli bir yedekleme olsa da PostgreSQL yedeklemesi arşiv koruması sunar. Kasaya ilk gönderilen yedekleme verileri, tanımlı bir kurala veya yaşam döngüsüne uygun olarak arşiv katmanına taşınabilir.

Bu bağlamda, aşağıdaki hiyerarşi PostgreSQL için yedekleme ilkesi nesnesini anlamanıza yardımcı olabilir:

  • İlke kuralı
    • Yedekleme kuralı
      • Yedekleme parametresi
        • Yedekleme türü (bu örnekte tam veritabanı yedeklemesi)
        • İlk veri deposu (yedeklemelerin başlangıçta geldiği yer)
        • Tetikleyici (yedeklemenin tetikleme şekli)
          • Takvim
          • Varsayılan etiketleme ölçütleri (tüm zamanlanmış yedeklemeleri bekletme kuralına bağlayan varsayılan etiket)
    • Varsayılan bekletme kuralı (varsayılan olarak ilk veri deposundaki tüm yedeklemelere uygulanan bir kural)

İlke nesnesi ne tür yedeklemelerin tetiklendiklerini, bunların nasıl tetiklendiklerini (bir zamanlama aracılığıyla), nelerle etiketlendiklerini, nereye indiklerini (veri deposu) ve veri deposundaki verilerinin yaşam döngüsünü tanımlar.

PostgreSQL için varsayılan PowerShell nesnesi her hafta tam yedekleme tetikle diyor. Yedeklemeler kasaya ulaşır ve burada üç ay boyunca depolanır.

Arşiv katmanını ilkeye eklemek istiyorsanız, verilerin kasadan arşive ne zaman taşınacağını, verilerin arşivde ne kadar süreyle kalacağına ve zamanlanmış yedeklemelerden hangisinin arşivlenebilir olarak etiketlenmesi gerektiğine karar vermeniz gerekir. Kasa veri deposundan arşiv veri deposuna yedekleme verilerinin yaşam döngüsünü tanımlayan bir bekletme kuralı eklemeniz gerekir. Bekletme kuralı, yedekleme verilerinin arşiv veri deposunda ne kadar süre kalacağını da tanımlar. Ardından zamanlanmış yedeklemeleri arşivlenebilir olarak işaretleyen bir etiket eklemeniz gerekir.

Sonuçta elde edilen PowerShell nesnesi aşağıdaki gibidir:

  • İlke kuralı
    • Yedekleme kuralı
      • Yedekleme parametresi
        • Yedekleme türü (bu örnekte tam veritabanı yedeklemesi)
        • İlk veri deposu (yedeklemelerin başlangıçta geldiği yer)
        • Tetikleyici (yedeklemenin tetikleme şekli)
          • Takvim
          • Varsayılan etiketleme ölçütleri (zamanlanmış tüm yedeklemeleri bekletme kuralına bağlayan varsayılan etiket)
          • Aynı ada sahip yeni saklama kuralı için yeni etiketleme kriterleri
    • Varsayılan bekletme kuralı (varsayılan olarak ilk veri deposundaki tüm yedeklemelere uygulanan bir kural)
    • Yeni bekletme kuralı
      • Yaşam çevrimi
        • Kaynak veri deposu
        • Kaynak veri deposunda silinme süresi
        • Hedef veri deposuna kopyalama

İlke şablonunu alma

PostgreSQL veritabanı yedeklemesi için yedekleme ilkesinin iç bileşenlerini anlamak için komutunu kullanarak Get-AzDataProtectionPolicyTemplate ilke şablonunu alın. Bu komut, bir veri kaynağı türü için varsayılan ilke şablonunu döndürür. Yeni bir ilke oluşturmak için bu ilke şablonunu kullanın.

$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

İlke şablonu bir tetikleyiciden (yedeklemeyi neyin tetiklediğine karar veren) ve bir yaşam döngüsünden (yedeklemenin ne zaman silineceğine, kopyalandığına veya taşıneceğine karar verir) oluşur. PostgreSQL veritabanı yedeklemesinde, tetikleyici için varsayılan değer zamanlanmış haftalık tetikleyicidir (yedi günde bir yedekleme). Her yedekleme üç ay boyunca saklanır.

 $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 : {}

İlke şablonunu değiştirme

Zamanlamayı değiştirme

Varsayılan ilke şablonu haftada bir yedekleme sunar. Yedekleme zamanlamasını haftada birden çok gün olacak şekilde değiştirebilirsiniz. Zamanlamayı değiştirmek için komutunu kullanın Edit-AzDataProtectionPolicyTriggerClientObject .

Aşağıdaki örnek, haftalık yedeklemeyi her haftanın Pazar, Çarşamba ve Cuma günleri olarak değiştirir. Zamanlama tarihi dizisi tarihlerden bahseder ve bu tarihler için haftanın günleri haftanın günleri olarak alınır. Ayrıca bu zamanlamaların her hafta yineleneceğini belirtmeniz gerekir. Bu nedenle, zamanlama aralığı 1 ve aralık türü 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   

Yeni bekletme kuralı ekleme

Arşiv koruması eklemek istiyorsanız ilke şablonunu değiştirmeniz gerekir.

Varsayılan şablon, varsayılan saklama kuralı altında ilk veri deposu için bir yaşam döngüsüne sahiptir. Bu senaryoda kural, yedekleme verilerinin üç ay sonra silinmesini söyler. Verilerin arşiv veri deposuna ne zaman taşındığını tanımlayan yeni bir bekletme kuralı eklemelisiniz. Başka bir ifadeyle yedekleme verileri önce arşiv veri deposuna kopyalanır ve ardından kasa veri deposunda silinir.

Ayrıca kural, verilerin arşiv veri deposunda ne kadar süre tutulacaklarını tanımlamalıdır. Yeni yaşam döngüleri oluşturmak için komutunu kullanın New-AzDataProtectionRetentionLifeCycleClientObject . Bu yaşam döngülerini yeni veya mevcut kurallarla ilişkilendirmek Edit-AzDataProtectionPolicyRetentionRuleClientObject için komutunu kullanın.

Aşağıdaki örnek adlı Monthlyyeni bir bekletme kuralı oluşturur. Bu kuralda, her ayın ilk başarılı yedeklemesi altı ay boyunca kasada tutulur, arşiv katmanına taşınır ve 24 ay boyunca arşiv katmanında tutulur.

$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

Etiket ve ilgili ölçütleri ekleme

Bekletme kuralı oluşturduktan sonra, yedekleme ilkesinin Trigger özelliğinde karşılık gelen bir etiket oluşturmanız gerekir. Yeni etiketleme ölçütleri oluşturmak için komutunu kullanın New-AzDataProtectionPolicyTagCriteriaClientObject . Mevcut etiketi güncelleştirmek veya yeni bir etiket oluşturmak için Edit-AzDataProtectionPolicyTagClientObject komutunu kullanın.

Aşağıdaki örnek, ayın ilk başarılı yedeklemesi olan ölçütle birlikte yeni bir etiket oluşturur. Etiket, uygulanacak ilgili bekletme kuralıyla aynı adı taşır.

Bu örnekte, etiket ölçütleri olarak adlandırılır Monthly:

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

Zamanlama haftada birden çok yedeklemeyse (önceki örnekte belirtildiği gibi her Pazar, Çarşamba ve Perşembe) ve Pazar ve Cuma yedeklemelerini arşivleme istiyorsanız, etiketleme ölçütlerini aşağıdaki gibi değiştirebilirsiniz:

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

Yeni bir PostgreSQL yedekleme ilkesi oluşturma

Şablonu gereksinimlere göre değiştirdikten sonra, değiştirilen şablonu kullanarak bir ilke oluşturmak için komutunu kullanın New-AzDataProtectionBackupPolicy :

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

Yedeklemeyi yapılandırma

Kasayı ve ilkeyi oluşturduktan sonra PostgreSQL için Azure Veritabanı'nda PostgreSQL veritabanını yedeklemek için üç kritik noktayı göz önünde bulundurmanız gerekir.

Anahtar varlıkları anlama

Yedeklenecek PostgreSQL veritabanı

Yedeklenecek PostgreSQL veritabanının Resource Manager kimliğini getirin. Bu kimlik, veritabanının tanımlayıcısı olarak görev alır. Aşağıdaki örnek, farklı bir abonelik altındaki kaynak grubunda empdb11 bulunan PostgreSQL sunucusu testposgresqlaltında adlı ossrg bir veritabanı kullanır:

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

Güvenli Anahtar Havuzu

Azure Backup hizmeti PostgreSQL veritabanına bağlanmak için kullanıcı adını ve parolayı depolamaz. Bunun yerine, yedekleme yöneticisi anahtarları anahtar kasasına yerleştirir. Azure Backup hizmeti daha sonra anahtar kasasına erişir, anahtarları okur ve veritabanına erişir. İlgili anahtarın gizli kimliğini not edin.

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

Yedekleme kasası

Backup kasasını PostgreSQL sunucusuna bağlamanız ve ardından anahtar kasasında bulunan anahtarlar aracılığıyla veritabanına erişmeniz gerekir. Bu nedenle Backup kasası postgreSQL sunucusuna ve anahtar kasasına erişim gerektirir. Yedekleme kasasının yönetilen kimliğine erişim sağlanır.

Veritabanının anahtarlarının depolandığı PostgreSQL sunucusunda ve Azure Key Vault'ta Backup kasasının yönetilen kimliğine vermeniz gereken uygun izinleri okuyun.

İsteği hazırlama

Tüm ilgili izinleri ayarladıktan sonra yedeklemenin yapılandırmasını iki adımda gerçekleştirin:

  1. komutundaki ilgili kasayı, ilkeyi ve PostgreSQL veritabanını Initialize-AzDataProtectionBackupInstance kullanarak isteği hazırlayın.
  2. komutunu kullanarak New-AzDataProtectionBackupInstance veritabanını yedekleme isteğini gönderin.
$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

İsteğe bağlı yedekleme çalıştırma

İlgili yedekleme örneğini, yedekleme tetiklemeniz gereken Get-AzDataProtectionBackupInstance komutunu kullanarak alın.

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

Yedekleme tetiklerken bir bekletme kuralı belirtebilirsiniz. İlkedeki bekletme kurallarını görüntülemek için ilke nesnesine göz atın. Aşağıdaki örnekte, adıyla Default kural görüntülenir. Bu makalede, isteğe bağlı yedekleme için bu örnek kural kullanılır.

$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

İsteğe bağlı yedekleme tetikleme için komutunu Backup-AzDataProtectionBackupInstanceAdhoc kullanın:

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

İş Takibi

Get-AzDataProtectionJob komutunu kullanarak tüm işleri izleyin. Tüm işleri listeleyebilir ve belirli bir iş ayrıntısı getirebilirsiniz.

Tüm Backup kasalarındaki tüm işleri izlemek için Az.ResourceGraph'u da kullanabilirsiniz. Herhangi bir Backup kasasında Search-AzDataProtectionJobInAzGraph ilgili işleri getirmek için komutunu kullanın:

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