Aracılığıyla paylaş


Azure CLI kullanarak PostgreSQL veritabanlarını yedekleme

Bu makalede, Azure CLI kullanarak Azure Sanal Makineler'deki PostgreSQL veritabanlarının nasıl yedeklediği açıklanır. PostgreSQL veritabanları için Azure portalı, Azure PowerShell ve REST API kullanarak da yedeklemeyi yapılandırabilirsiniz.

Desteklenen senaryolar ve PostgreSQL için Azure Veritabanı'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ı, depolama hesabındaki bloblar ve Azure diskleri gibi Azure Backup'ın desteklediği 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 adlı kaynak grubunun altında, westus bölgesinde, testBkpVaultRG adında bir Backup kasası oluşturacaksınız. Backup 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": "aaaaaaaa-bbbb-cccc-1111-222222222222",
    "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"
}

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 az dataprotection backup-policy get-default-policy-template 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.

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ğ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.

Zamanlanmış tetikleyici

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

Gözaltı kuralı için varsayılan 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

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

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 az dataprotection backup-policy trigger set .

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.

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ı 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 az dataprotection backup-policy retention-rule create-lifecycle . Bu yaşam döngülerini yeni veya mevcut kurallarla ilişkilendirmek az dataprotection backup-policy retention-rule set 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.

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ş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 az dataprotection backup-policy tag create-absolute-criteria . Mevcut etiketi güncelleştirmek veya yeni bir etiket oluşturmak için komutunu kullanın az dataprotection backup-policy tag set .

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

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

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

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, şu komutu kullanarak az dataprotection backup-policy tag create-generic-criteria etiketleme ölçütlerini değiştirebilirsiniz:

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

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

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

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. Örnekte Bash kullanılı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.

Aşağıdaki örnekte Bash kullanılır. İlgili anahtarın gizli tanımlayıcısını not edin.

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

Yedekleme alanı

Backup 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 Backup kasası postgreSQL sunucusuna ve anahtar kasasına erişim gerektirir. Yedekleme kasasının yönetilen kimliğine erişim sağlanır.

PostgreSQL sunucusundaki Backup kasasının yönetilen kimliğine ve veritabanının anahtarlarını depolayan anahtar kasasına vermeniz gereken izinler hakkında bilgi edinin.

İ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ı az dataprotection backup-instance initialize kullanarak isteği hazırlayın.
  2. komutunu kullanarak az dataprotection backup-instance create veritabanını yedekleme isteğini gönderin.
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 ilke JSON dosyasına göz atın. Aşağıdaki örnekte, Default ve Monthly adlarında iki bekletme kuralı bulunmaktadır. Bu makalede isteğe Monthly bağlı yedekleme için kural kullanılır.

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 komutunu az dataprotection backup-instance adhoc-backup kullanın:

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

İşleri izlemek

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ındaki tüm işleri izlemek için Az.ResourceGraph'u da kullanabilirsiniz. İlgili işleri Backup kasaları arasında getirmek için az dataprotection job list-from-resourcegraph komutunu kullanın.

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