Aracılığıyla paylaş


PostgreSQL için Azure Veritabanı'nı geri yükleme - Azure CLI kullanarak Esnek Sunucular

Bu makalede, Azure CLI kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu'nun nasıl geri yükleneceği açıklanmaktadır.

Uyarı

Özgün Konum Kurtarma (OLR) seçeneği PaaS veritabanları için desteklenmez. Bunun yerine Alternate-Location Recovery'yi (ALR) kullanarak bir kurtarma noktasından geri yükleme yapın ve hem kaynak hem de geri yüklenen veritabanlarını koruyarak aynı veya başka bir Azure PostgreSQL – Esnek Sunucuda yeni bir veritabanı oluşturun.

Örneklerde kaynak grubunun TestBkpVault altında mevcut bir Backup kasasını testBkpVaultRGkullanalım.

Önkoşullar

PostgreSQL için Azure Veritabanı – Esnek Sunucu yedeklemelerinden geri yüklemeden önce aşağıdaki önkoşulları gözden geçirin:

Uyarı

Microsoft kuruluşundaki Yedekleme kasasında yedek veri bir blob olarak depolanır. Geri yükleme işlemi sırasında yedekleme verileri kiracılar arasında bir depolama hesabından diğerine kopyalanır.

PostgreSQL – Esnek Sunucu geri yükleme izinlerini ayarlama

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

Saklama alanının sistem tarafından atanan yönetilen kimliğine yönelik ilgili izinleri hedef PostgreSQL – Esnek sunucuya atamak için Azure PostgreSQL – Esnek Sunucu veritabanını yedeklemek amacıyla gereken izin kümesini gözden geçirin.

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ğinehedef depolama hesabında erişim gerekir.

PostgreSQL – Esnek Sunucu için ilgili kurtarma noktasını getirme

Kasadaki 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 alı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 AzureDatabaseForPostgreSQLFlexibleServer -subscriptions "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"

{
    "datasourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/flexibleServers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "tags": null,
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.

Örnek tanımlandığında, 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
}

PostgreSQL – Esnek Sunucu geri yükleme isteğini hazırlama

PostgreSQL – Esnek sunucu veritabanının kurtarma noktasını yalnızca dosya olarak geri yükleyebilirsiniz.

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 depolama hesabı testcontainerrestore altında, testossstorageaccount adlı bir kapsayıcı.

$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 AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Uyarı

Hedef depolama hesabına geri yükleme tamamlandıktan sonra, postgreSQL için Azure Veritabanı – Esnek sunucu veritabanını hedeften geri yüklemek için yardımcı programını kullanabilirsiniz pg_restore .

Mevcut bir PostgreSQL – Esnek Sunucuya ve var olan bir veritabanına bağlanmak için aşağıdaki komutu kullanın:

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

Bu senaryoda:

  • Fd: Dizin biçimi.
  • -j: İş sayısı.
  • -C: Çıkış, veritabanını oluşturma ve ardından ona yeniden bağlanma komutuyla başlar.

Aşağıdaki örnekte söz diziminin nasıl görünebileceği gösterilmektedir:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

Geri yükleneceği birden fazla veritabanınız varsa, her veritabanı için önceki komutu yeniden çalıştırın. Ayrıca, birden çok eşzamanlı iş -jkullanarak, çok sanal çekirdekli hedef sunucudaki büyük bir veritabanının geri yükleme süresini kısaltabilirsiniz. İş sayısı, hedef sunucu için ayrılan sayıdan vCPUs küçük veya buna eşit olabilir.

PostgreSQL – Esnek Sunucu için geri yüklemeyi tetikleme

Hazırlanan istekle geri yükleme işlemini tetikleme için komutunu kullanın az dataprotection backup-instance restore trigger .

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

PostgreSQL için işleri takip etme – Esnek Sunucu geri yükleme

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

Az.ResourceGraph ayrıca tüm Backup kasalarındaki işleri izlemek için kullanabilirsiniz. az dataprotection job list-from-resourcegraph komutunu kullanarak tüm yedekleme kasalarındaki ilgili işi elde edin.

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

Sonraki adım

PostgreSQL için Azure Veritabanı - Esnek Sunucu için yedekleme ve geri yükleme işlemleriyle ilgili yaygın hataları giderme.