Aracılığıyla paylaş


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

Bu makalede, Azure Backup tarafından yedeklenen bir Azure PostgreSQL sunucusuna Azure PostgreSQL veritabanlarının nasıl geri yükleneceği açıklanır.

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

Bu makalede şunları yapmayı öğreneceksiniz:

  • Yeni bir PostgreSQL veritabanı oluşturmak için geri yükleme

  • Geri yükleme işlemi durumunu izleme

Örneklerde testBkpVaultRG kaynak grubunun altında mevcut bir Backup kasası TestBkpVault'a başvuracağız.

Yedeklenen PostgreSQL veritabanını geri yükleme

İzinleri ayarlama

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

Hedef PostgreSQL sunucusunda kasanın sistem tarafından atanan yönetilen kimliği için ilgili izinleri atamak için bkz. Azure PostgreSQL veritabanını yedeklemek için gereken izinler kümesi.

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ı getirme

Kasa içindeki tüm yedekleme örneklerini listelemek için az dataprotection backup-instance list komutunu kullanın. Ardından az dataprotection backup-instance show komutunu kullanarak ilgili örneği getirin. 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-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "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
  }
.
.
.
.
.

Örnek tanımlandıktan sonra az dataprotection recovery-point list komutunu kullanarak ilgili kurtarma noktasını getirin.

az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149/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 recoveryPointDataStoreDetails içindeki tür değişkeni ArchiveStore olur.

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

Yeni PostgreSQL veritabanının Azure Resource Manager Kimliğini (ARM Kimliği) oluşturma. İzinlerin atandığı hedef PostgreSQL sunucusuyla bunu oluşturmanız gerekir. Ayrıca gerekli PostgreSQL veritabanı adını da oluşturur. Örneğin, bir PostgreSQL veritabanı, farklı bir abonelikle targetrg kaynak grubundaki hedef PostgreSQL sunucusu targetossserver altında emprestored21 olarak adlandırılabilir.

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

Geri yükleme isteğini tüm ilgili ayrıntılarla hazırlamak için az dataprotection backup-instance restore initialize-for-data-recovery 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 deposuna yeniden doldurma
  2. Kaynak veri depounu değiştirme
  3. Yeniden doldurma önceliğini belirtmek için başka parametreler ekleyin
  4. Yeniden doldurulan kurtarma noktasının kasa veri deposunda tutulacağı süreyi belirtin
  5. Bu kurtarma noktasından veritabanı olarak geri yükle

Önceki 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

İzinlerin atandığı depolama hesabında kapsayıcının Tekdüzen Kaynak Tanımlayıcısını (URI) getirin. Örneğin, farklı bir aboneliğe sahip bir depolama hesabı testossstorageaccount altında testcontainerrestore adlı bir kapsayıcı.

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

Geri yükleme isteğini tüm ilgili ayrıntılarla hazırlamak için az dataprotection backup-instance restore initialize-for-data-recovery-as-files 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 doldurma önceliğini ve yeniden doldurulan kurtarma noktasının bekletme süresini gün cinsinden 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şturmayı başaracağını doğrulamak için az dataprotection backup-instance validate-for-restore komutunu kullanın.

Geri yüklemeyi tetikleme

Daha önce hazırlanmış istekle geri yükleme işlemini tetikleme amacıyla az dataprotection backup-instance restore trigger komutunu kullanın.

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

İzleme işi

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 işleri izlemek için Az.ResourceGraph'ı da kullanabilirsiniz. Tüm Backup kasalarında ilgili işi almak için az dataprotection job list-from-resourcegraph komutunu kullanın.

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

Sonraki adımlar