Aracılığıyla paylaş


Azure CLI kullanarak Azure PostgreSQL veritabanlarını yedekleme

Bu makalede , Azure CLI kullanarak Azure PostgreSQL veritabanını yedekleme işlemi açıklanır.

Bu makalede şunları yapmayı öğreneceksiniz:

  • Yedekleme kasası oluşturma
  • Yedekleme ilkesi oluşturma
  • Azure PostgreSQL veritabanının yedeğini yapılandırma
  • İsteğe bağlı yedekleme işi çalıştırma

InformgreSQL veritabanlarında desteklenen senaryolar ve sınırlamalar için bkz. destek matrisi.

Yedekleme kasası oluşturma

Backup vault, Azure'daki bir depolama varlığıdır. Bu, Azure Backup tarafından desteklenen yeni iş yükleri için yedekleme verilerini depolar. Örneğin, PostgreSQL için Azure Veritabanı sunucuları, depolama hesabındaki blobları ve Azure Diskleri... Yedekleme kasaları, yönetim yükünü en aza indirirken yedekleme verilerinizi düzenlemeye yardımcı olur. 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, westus bölgesinde testBkpVaultRG kaynak grubu altında bir Backup kasası TestBkpVault oluşturacağız. Yedekleme kasası oluşturmak için az dataprotection vault create komutunu kullanın. Backup kasası oluşturma hakkında daha fazla bilgi edinin.

az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

{
  "eTag": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
  "identity": {
    "principalId": "2ca1d5f7-38b3-4b61-aa45-8147d7e0edbc",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "SystemAssigned"
  },
  "location": "westus",
  "name": "TestBkpVault",
  "properties": {
    "provisioningState": "Succeeded",
    "storageSettings": [
      {
        "datastoreType": "VaultStore",
        "type": "LocallyRedundant"
      }
    ]
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.DataProtection/backupVaults"
}

Kasa oluşturulduktan sonra Azure PostgreSQL veritabanlarını korumak için bir Yedekleme ilkesi oluşturalım.

Yedekleme ilkesi oluşturma

PostGreSQL yedekleme ilkesini anlama

Disk yedeklemesi günde birden çok yedekleme sunarken blob yedekleme tetikleyicisi olmayan sürekli bir yedekleme olsa da PostgreSQL yedeklemesi Arşiv koruması sunar. Kasaya ilk gönderilen yedekleme verileri daha sonra tanımlı bir kural veya yaşam döngüsüne göre arşiv katmanına taşınabilir. Bu bağlamda PostgreSQL için yedekleme ilkesi nesnesini anlayalım.

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (Bu örnekte tam veritabanı yedeklemesi)
        • İlk Veri Deposu (Yedeklemeler başlangıçta nereye gelecek)
        • Tetikleyici (Yedekleme nasıl tetikleniyor)
          • Zamanlama tabanlı
          • Varsayılan etiketleme ölçütleri (zamanlanan tüm yedeklemeler için varsayılan bir 'etiket'. Bu etiket, yedeklemeleri bekletme kuralına bağlar)
    • Varsayılan Bekletme Kuralı (Varsayılan olarak ilk veri deposundaki tüm yedeklemelere uygulanacak bir kural)

Bu nedenle, bu nesne ne tür yedeklemelerin tetiklendiklerini, nasıl tetiklendiklerini (bir zamanlama aracılığıyla), nelerle etiketlendiklerini, nereye indiklerini (veri deposu) ve bir veri deposundaki yedekleme verilerinin yaşam döngüsünü tanımlar. PostgreSQL için varsayılan PowerShell nesnesi, her hafta tam yedekleme tetiklediklerini ve üç ay boyunca depolandıkları kasaya ulaşacaklarını söyler.

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 etiketleneceğine karar vermeniz gerekir. Bu nedenle, yedekleme verilerinin yaşam döngüsünün kasa veri deposundan arşiv veri deposuna tanımlandığı ve arşiv veri deposunda ne kadar süre kalacaklarını gösteren bir bekletme kuralı eklemeniz gerekir. Ardından, zamanlanmış yedeklemeleri arşivlenecek uygun olarak işaretleyecek bir etiket eklemeniz gerekir.

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

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (Bu örnekte tam veritabanı yedeklemesi)
        • İlk Veri Deposu (Yedeklemeler başlangıçta nereye gelecek)
        • Tetikleyici (Yedekleme nasıl tetikleniyor)
          • Zamanlama tabanlı
          • Varsayılan etiketleme ölçütleri (zamanlanan tüm yedeklemeler için varsayılan bir 'etiket'. Bu etiket, yedeklemeleri bekletme kuralına bağlar)
          • Aynı adı 'X' olan yeni bekletme kuralı için yeni Etiketleme ölçütleri
    • Varsayılan Bekletme Kuralı (Varsayılan olarak ilk veri deposundaki tüm yedeklemelere uygulanacak bir kural)
    • 'X' olarak adlandırılan yeni bir Bekletme kuralı
      • Yaşam döngüsü
        • Kaynak veri deposu
        • Kaynak veri deposundaKi süre sonunda silme
        • Hedef veri deposuna kopyalama

İlke şablonunu alma

Azure PostgreSQL veritabanı yedeklemesi için yedekleme ilkesinin iç bileşenlerini anlamak için az dataprotection backup-policy get-default-policy-template komutunu kullanarak ilke şablonunu alın. Bu komut, belirli 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.

az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "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ği/kopyalanıp taşınacaklarına karar veren) oluşur. Azure PostgreSQL veritabanı yedeklemesinde tetikleyici için varsayılan değer, zamanlanmış haftalık tetikleyicidir (yedi günde bir yedekleme) ve her yedeklemeyi üç ay boyunca saklama.

Zamanlanmış tetikleyici:

"trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        }

Varsayılan bekletme kuralı yaşam döngüsü:

 {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }

İlke şablonunu değiştirme

Önemli

Azure PowerShell'de, Nesneler tüm değişiklikleri gerçekleştirmek için hazırlama konumları olarak kullanılabilir. Azure CLI'da , Nesneler diye bir şey olmadığından dosyaları kullanmamız gerekir. Her düzenleme işlemi, içeriğin giriş dosyasından okunduğu ve çıkış dosyasına yeniden yönlendirildiği yeni bir dosyaya yönlendirilmelidir. Daha sonra betikte kullanırken dosyayı gerektiği gibi yeniden adlandırabilirsiniz.

Zamanlamayı değiştirme

Varsayılan ilke şablonu haftada bir kez yedekleme sunar. Yedeklemenin haftada birden çok gün gerçekleşmesi için zamanlamayı değiştirebilirsiniz. Zamanlamayı değiştirmek için az dataprotection backup-policy trigger set komutunu kullanın.

Aşağıdaki örnek haftalık yedeklemeyi her haftanın Her Pazar, Çarşamba ve Cuma günü gerçekleştirilecek şekilde değiştirir. Zamanlama tarihi dizisi tarihlerden bahseder ve bu tarihlerin 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ü "Haftalık" olur.

az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
  "R/2021-08-15T22:00:00+00:00/P1W",
  "R/2021-08-18T22:00:00+00:00/P1W",
  "R/2021-08-20T22:00:00+00:00/P1W"
]

az dataprotection backup-policy trigger set --policy .\OSSPolicy.json  --schedule R/2021-08-15T22:00:00+00:00/P1W R/2021-08-18T22:00:00+00:00/P1W R/2021-08-20T22:00:00+00:00/P1W > EditedOSSPolicy.json

Yeni bekletme kuralı ekleme

Arşiv korumasını eklemek istiyorsanız ilke şablonunu aşağıdaki gibi 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 sahip olur. 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 tutulduğunu tanımlamalıdır. Yeni yaşam döngüleri oluşturmak için az dataprotection backup-policy retention-rule create-lifecycle komutunu kullanın ve bunları yeni kurallarla veya mevcut kurallarla ilişkilendirmek için az dataprotection backup-policy retention-rule set komutunu kullanın.

Aşağıdaki örnek, her ayın ilk başarılı yedeklemesinin altı ay boyunca kasada tutulması, arşiv katmanına taşınması ve 24 ay boyunca arşiv katmanında tutulması gereken Aylık adlı yeni bir bekletme kuralı oluşturur.

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON

Etiket ve ilgili ölçütleri ekleme

Bekletme kuralı oluşturulduktan sonra, Yedekleme ilkesinin Trigger özelliğinde karşılık gelen bir etiket oluşturmanız gerekir. Yeni bir etiketleme ölçütü oluşturmak için az dataprotection backup-policy tag create-absolute-criteria komutunu kullanın ve mevcut etiketi güncelleştirmek veya yeni bir etiket oluşturmak için az dataprotection backup-policy tag set komutunu kullanın.

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

Bu örnekte etiket ölçütleri Aylık olarak adlandırılmalıdır.

az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Zamanlamanın haftada birden çok yedekleme (yukarıdaki örnekte belirtildiği gibi her Pazar, Çarşamba, Perşembe) olduğunu ve Pazar ve Cuma yedeklemelerini arşivleme istediğinizi varsayalım. Bu durumda , az dataprotection backup-policy tag create-generic-criteria komutu kullanılarak etiketleme ölçütleri aşağıdaki gibi değiştirilebilir.

az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Yeni bir PostgreSQL yedekleme ilkesi oluşturma

Şablon gereksinimlere göre değiştirildikten sonra, değiştirilen şablonu kullanarak bir ilke oluşturmak için az dataprotection backup-policy create komutunu kullanın.

az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault

Yedeklemeyi yapılandırma

Kasa ve ilke oluşturulduktan sonra Azure PostgreSQL veritabanını korumak için göz önünde bulundurmanız gereken üç kritik nokta vardır.

İlgili önemli varlıklar

Korunacak PostGreSQL veritabanı

Korunacak PostgreSQL'in Azure Resource Manager Kimliğini (ARM Kimliği) getirin. Bu, veritabanının tanımlayıcısı olarak görev alır. Farklı bir abonelik altındaki ossrg kaynak grubunda bulunan PostgreSQL sunucusu testposgresql altında empdb11 adlı bir veritabanı örneği kullanacağız.

Aşağıdaki örnekte bash kullanılır.

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

Azure key vault

Azure Backup hizmeti PostgreSQL veritabanına bağlanmak için kullanıcı adını ve parolayı depolamaz. Bunun yerine, yedekleme yöneticisinin anahtarları anahtar kasasına sağlaması gerekir. Ardından Yedekleme hizmeti anahtar kasasına erişecek, anahtarları okuyacak ve sonra veritabanına erişecektir. İlgili anahtarın gizli dizi tanımlayıcısını not alın.

Aşağıdaki örnekte bash kullanılır.

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

Yedekleme kasası

Yedekleme kasasının PostgreSQL sunucusuna bağlanması ve ardından anahtar kasasında bulunan anahtarlar aracılığıyla veritabanına erişmesi gerekir. Bu nedenle, PostgreSQL sunucusuna ve anahtar kasasına erişim gerektirir. Backup kasasının Yönetilen Hizmet Kimliğine (MSI) erişim verilir.

PostgreSQL sunucusundaki Backup kasasının Yönetilen Hizmet Kimliğine (MSI) ve veritabanının anahtarlarını depolayan Azure Key Vault'a vermeniz gereken izinlere bakın.

İsteği hazırlama

Tüm ilgili izinler ayarlandıktan sonra yedekleme yapılandırması iki adımda gerçekleştirilir.

  1. az dataprotection backup-instance initialize komutunu kullanarak ilgili kasa, ilke, PostgreSQL veritabanını kullanarak ilgili isteği hazırlarız.
  2. veritabanını korumak için az dataprotection backup-instance create komutunu kullanarak isteği gönderiyoruz.
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-location> --policy-id <policy_arm_id>  --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON

az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON

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

Yedeklemeyi tetiklerken bir bekletme kuralı belirtmeniz gerekir. İlkedeki bekletme kurallarını görüntülemek için bekletme kuralları için ilke JSON dosyasında gezinin. Aşağıdaki örnekte , Varsayılan ve Aylık adlarıyla iki bekletme kuralı vardır. İsteğe bağlı yedekleme için Aylık kuralını kullanacağız.

az dataprotection backup-policy show  -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
  "id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
  "name": "osspol5",
  "properties": {
    "datasourceTypes": [
      "Microsoft.DBforPostgreSQL/servers/databases"
    ],
    "objectType": "BackupPolicy",
    "policyRules": [
      {
        "backupParameters": {
          "backupType": "Full",
          "objectType": "AzureBackupParams"
        },
        "dataStore": {
          "dataStoreType": "VaultStore",
          "objectType": "DataStoreInfoBase"
        },
        "name": "BackupWeekly",
        "objectType": "AzureBackupRule",
        "trigger": {
          "objectType": "ScheduleBasedTriggerContext",
          "schedule": {
            "repeatingTimeIntervals": [
              "R/2020-04-04T20:00:00+00:00/P1W",
              "R/2020-04-01T20:00:00+00:00/P1W"
            ],
            "timeZone": "UTC"
          },
          "taggingCriteria": [
            {
              "criteria": [
                {
                  "absoluteCriteria": [
                    "FirstOfMonth"
                  ],
                  "daysOfMonth": null,
                  "daysOfTheWeek": null,
                  "monthsOfYear": null,
                  "objectType": "ScheduleBasedBackupCriteria",
                  "scheduleTimes": null,
                  "weeksOfTheMonth": null
                }
              ],
              "isDefault": false,
              "tagInfo": {
                "eTag": null,
                "id": "Monthly_",
                "tagName": "Monthly"
              },
              "taggingPriority": 15
            },
            {
              "criteria": null,
              "isDefault": true,
              "tagInfo": {
                "eTag": null,
                "id": "Default_",
                "tagName": "Default"
              },
              "taggingPriority": 99
            }
          ]
        }
      },
      {
        "isDefault": false,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P10Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Monthly",
        "objectType": "AzureRetentionRule"
      },
      {
        "isDefault": true,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P1Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Default",
        "objectType": "AzureRetentionRule"
      }
    ]
  },
  "resourceGroup": "ossdemorg",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

İsteğe bağlı yedekleme tetikleme için az dataprotection backup-instance adhoc-backup komutunu kullanın.

az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault

İşleri izleme

az dataprotection job list komutunu kullanarak tüm işleri izleyin. Tüm işleri listeleyebilir ve belirli bir iş ayrıntısı getirebilirsiniz.

Tüm Backup kasalarında tüm işleri izlemek için Az.ResourceGraph'ı da kullanabilirsiniz. Backup kasalarında bulunan ilgili işleri getirmek için az dataprotection job list-from-resourcegraph komutunu kullanın.

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed

Sonraki adımlar