Aracılığıyla paylaş


Azure CLI kullanarak PostgreSQL veritabanlarını geri yükleme

Bu makalede, PostgreSQL veritabanlarını Azure Backup aracılığıyla yedeklediğiniz bir PostgreSQL için Azure Veritabanı sunucusuna geri yüklemek için Azure CLI'nin nasıl kullanılacağı açıklanmaktadır. PostgreSQL veritabanını Azure portalı, Azure PowerShell ve REST API kullanarak da geri yükleyebilirsiniz.

PostgreSQL veritabanı bir hizmet olarak platform (PaaS) veritabanı olduğundan, mevcut veritabanını değiştirerek (yedeklemelerin alındığı yerden) geri yüklemek için Original-Location Recovery (OLR) seçeneği desteklenmez. Aynı PostgreSQL için Azure Veritabanı sunucusunda veya başka bir PostgreSQL sunucusunda yeni bir veritabanı oluşturmak için kurtarma noktasından geri yükleyebilirsiniz. Bu seçenek Alternate-Location Kurtarma (ALR) olarak adlandırılır. ALR hem kaynak veritabanını hem de geri yüklenen (yeni) veritabanını tutmaya yardımcı olur.

Bu makalede yer alan örnekler, kaynak grubu TestBkpVault altında testBkpVaultRG adlı mevcut bir Yedekleme kasasına atıfta bulunmaktadır.

Yedeklenen PostgreSQL veritabanını geri yükleme

İzinleri ayarlama

Backup kasası, diğer Azure kaynaklarına erişmek için yönetilen kimlik kullanır. Yedeklemeden geri yüklemek için Backup kasasının yönetilen kimliği, veritabanının geri yüklenmesi gereken PostgreSQL için Azure Veritabanı sunucusunda bir dizi izin gerektirir.

Bir kasanın sistem atamalı yönetilen kimliğine yönelik ilgili izinleri hedef PostgreSQL sunucusuna atamak için PostgreSQL veritabanını yedeklemek için gereken izin kümesine bakın.

Kurtarma noktasını bir depolama hesabına dosya olarak geri yüklemek için Backup kasasının sistem tarafından atanan yönetilen kimliğine hedef depolama hesabında erişim gerekir.

İlgili kurtarma noktasını getir

Kasadaki tüm yedekleme örneklerini listelemek için az dataprotection backup-instance list komutunu kullanın. Ardından ilgili örneği getirmek için az dataprotection backup-instance show komutunu kullanın.

Alternatif olarak, büyük ölçekli senaryolar için, az dataprotection backup-instance list-from-resourcegraph komutunu kullanarak kasalar ve abonelikler arasında yedekleme örneklerini listeleyebilirsiniz.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL -subscriptions "xxxxxxxx-xxxx-xxxx-xxxx"

  {
    "datasourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers",
        "resourceUri": ""
      },
      "datasourceAuthCredentials": {
        "objectType": "SecretStoreBasedAuthCredentials",
        "secretStoreResource": {
          "secretStoreType": "AzureKeyVault",
          "uri": "https://vikottur-test.vault.azure.net/secrets/dbauth3",
          "value": null
        }
      },
      "friendlyName": "testpostgresql\\empdb11",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupPolicies/osspol3",
        "policyParameters": null,
        "policyVersion": ""
      },
      "protectionErrorDetails": null,
      "protectionStatus": {
        "errorDetails": null,
        "status": "ProtectionConfigured"
      },
      "provisioningState": "Succeeded",
      "validationType": null
    },
    "protectionState": "ProtectionConfigured",
    "resourceGroup": "testBkpVaultRG",
    "sku": null,
    "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tags": null,
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

Örneği tanımladıktan sonra az dataprotection recovery-point list komutunu kullanarak ilgili kurtarma noktasını getirin.

az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/recoveryPoints/9da55e757af94261afa009b43cd3222a",
  "name": "9da55e757af94261afa009b43cd3222a",
  "properties": {
    "friendlyName": "2031fdb43a914114b6ce644eb6fcb5ce",
    "objectType": "AzureBackupDiscreteRecoveryPoint",
    "policyName": "oss-clitest-policy",
    "policyVersion": null,
    "recoveryPointDataStoresDetails": [
      {
        "creationTime": "2021-09-13T15:17:41.209845+00:00",
        "expiryTime": null,
        "id": "beddea84-7b30-42a5-a752-7c75baf96a52",
        "metaData": "{\"objectType\":\"PostgresBackupMetadata\",\"version\":\"1.0\",\"postgresVersion\":\"11\",\"dbName\":\"postgres\",\"serverName\":\"testpostgresql\",\"serverFQDN\":\"testpostgresql.postgres.database.azure.com\",\"usernameUsed\":\"backupadmin@testpostgresql\",\"backupToolPath\":\"postgresql-11.6-1\\\\bin\\\\pg_dump.exe\",\"backupType\":\"Full\",\"backupDumpFormat\":\"CUSTOM\",\"backupToolArgsFormat\":\"--no-acl --no-owner --serializable-deferrable --no-tablespaces --quote-all-identifiers -Fc -d postgres://{0}:{1}@{2}:5432/{3}?sslmode=verify-full&sslrootcert=E:\\\\approot\\\\Plugins\\\\Postgres\\\\..\\\\..\\\\postgres-root.crt\",\"storageUnits\":{\"1\":\"DbBackupDumpData\"},\"streamNamesInFirstStorageUnit\":[\"dbbkpdmpdatastream-1631546260050\"],\"pitId\":\"2031fdb43a914114b6ce644eb6fcb5ce\",\"bytesTransferred\":2063,\"dataSourceSize\":8442527,\"backupToolVersion\":\"11\"}",
        "rehydrationExpiryTime": null,
        "rehydrationStatus": null,
        "state": "COMMITTED",
        "type": "VaultStore",
        "visible": true
      }
    ],
    "recoveryPointId": "9da55e757af94261afa009b43cd3222a",
    "recoveryPointTime": "2021-09-13T15:17:41.209845+00:00",
    "recoveryPointType": "Full",
    "retentionTagName": "default",
    "retentionTagVersion": "637671427933449525"
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupInstances/recoveryPoints"
}

Kurtarma noktasını arşiv katmanından getirmeniz gerekiyorsa içindeki type değişkeni recoveryPointDataStoreDetails olur ArchiveStore.

Geri yükleme isteğini hazırlama

PostgreSQL veritabanı için çeşitli geri yükleme seçenekleri vardır. Kurtarma noktasını başka bir veritabanı olarak geri yükleyebilir veya dosya olarak geri yükleyebilirsiniz. Kurtarma noktası arşiv katmanında da olabilir.

Veritabanı olarak geri yükleme

İzinleri atadığınız hedef PostgreSQL sunucusunu kullanarak yeni PostgreSQL veritabanının Azure Resource Manager kimliğini oluşturun. Ayrıca gerekli PostgreSQL veritabanı adını da oluştur. Örneğin, bir PostgreSQL veritabanı farklı bir aboneliğe sahip kaynak grubunda emprestored21 adlı hedef PostgreSQL sunucusu altında adlandırılabilir:targetossservertargetrg

$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"

az dataprotection backup-instance restore initialize-for-data-recovery Geri yükleme isteğini tüm ilgili ayrıntılarla hazırlamak için komutunu kullanın:

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore VaultStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" > OssRestoreReq.JSON

Arşiv tabanlı kurtarma noktası için şunları yapmanız gerekir:

  1. Arşiv veri deposundan kasa veri deposuna yeniden doldurma.
  2. Kaynak veri depolarını değiştirin.
  3. Yeniden sulandırma önceliğini belirlemek için diğer parametreleri ekleyin.
  4. Yeniden etkinleştirilen kurtarma noktasının depo veri tabanında tutulacağı süreyi belirtin.
  5. Bu kurtarma noktasından veritabanı olarak geri yükleyin.

Daha önce bahsedilen tüm işlemler için isteği bir kerede hazırlamak için aşağıdaki komutu kullanın:

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore ArchiveStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" --rehydration-priority Standard --rehydration-duration 12 > OssRestoreFromArchiveReq.JSON

Dosya olarak geri yükleme

İzinleri atadığınız depolama hesabı içindeki kapsayıcının URI'sini getirin. Aşağıdaki örnekte, farklı bir abonelikle testcontainerrestore adlı depolama hesabının altında testossstorageaccount adlı bir kapsayıcı kullanılır.

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

az dataprotection backup-instance restore initialize-for-data-recovery-as-files Geri yükleme isteğini tüm ilgili ayrıntılarla hazırlamak için komutunu kullanın:

az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Arşiv tabanlı kurtarma noktası için aşağıdaki betikte:

  • Kaynak veri depolarını değiştirin.
  • Yeniden nemlendirme önceliğini ve yeniden nemlendirilmiş kurtarma noktasının, gün cinsinden saklama süresini ekleyin.
az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore ArchiveStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a --rehydration-priority Standard --rehydration-duration 12 > OssRestoreAsFilesReq.JSON

JSON dosyasının yeni kaynaklar oluşturmada başarılı olup olmadığını doğrulamak için komutunu kullanın az dataprotection backup-instance validate-for-restore .

Geri yüklemeyi tetikleme

az dataprotection backup-instance restore trigger Önceden hazırlanmış istekle geri yükleme işlemini tetikleme komutunu kullanın:

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON

İşleri takip et

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

Ayrıca Az.ResourceGraph, tüm yedekleme depolarında işleri izlemek için kullanabilirsiniz. İlgili işi tüm Backup kasalarında almak için az dataprotection job list-from-resourcegraph komutunu kullanın.

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore