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 testBkpVaultRG altında mevcut bir Backup kasasını TestBkpVaultkullanalı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ı

Yedekleme verileri, Yedekleme kasasında Microsoft kiracısında 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.

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 Backup kasasının yönetilen kimliği, veritabanının geri yüklenmesi gereken Azure PostgreSQL – Esnek Sunucu üzerinde bir dizi izin gerektirir.

Kasanı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 için gereken izin kümesini denetleyin.

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.

İlgili kurtarma noktasını getir

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"
}

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ı testossstorageaccount altında, testcontainerrestore 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 betikte:

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

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

İşleri takip et

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

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

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

Sonraki adımlar

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