Bagikan melalui


Memulihkan database Azure PostgreSQL menggunakan CLI Azure

Artikel ini menjelaskan cara memulihkan database Azure PostgreSQL ke server Azure PostgreSQL yang dicadangkan oleh Azure Backup.

Menjadi database PaaS, opsi Pemulihan Lokasi Asli (OLR) untuk memulihkan dengan mengganti database yang ada (tempat asal cadangan diambil) tidak didukung. Anda dapat memulihkan dari titik pemulihan untuk membuat database baru di server Azure PostgreSQL yang sama atau di server PostgreSQL lainnya, yang disebut Pemulihan Lokasi Alternatif (ALR) yang membantu menyimpan database sumber dan database yang dipulihkan (baru).

Di sini, mari kita gunakan vault Backup TestBkpVault yang ada, di bawah grup sumber daya testBkpVaultRG dalam contoh.

Pulihkan database PostgreSQL yang dicadangkan

Menyiapkan izin

Kubah cadangan menggunakan identitas terkelola untuk mengakses sumber daya Azure lainnya. Untuk memulihkan dari pencadangan, identitas terkelola brankas Cadangan memerlukan serangkaian izin di server Azure PostgreSQL tempat database harus dipulihkan.

Guna menetapkan izin yang relevan untuk identitas terkelola yang ditetapkan sistem brankas pada server PostgreSQL target, lihat serangkaian izin yang diperlukan untuk mencadangkan database Azure PostgreSQL.

Untuk memulihkan titik pemulihan sebagai file ke akun penyimpanan, Identitas terkelola yang ditetapkan sistem pada brankas cadangan memerlukan akses pada akun penyimpanan target.

Ambil titik pemulihan yang relevan

Untuk mencantumkan semua instans cadangan dalam vault, gunakan perintah az dataprotection backup-instance list. Lalu, ambil instans yang relevan menggunakan perintah az dataprotection backup-instance show. Atau, untuk skenario dalam skala, Anda dapat membuat daftar instans cadangan di seluruh vault dan langganan menggunakan perintah az dataprotection backup-instans list-from-resourcegraph.

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

Setelah instans diidentifikasi, ambil titik pemulihan yang relevan menggunakan perintah az dataprotection recovery-point list.

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

Jika Anda perlu mengambil titik pemulihan dari tingkat arsip, maka variabel type di recoveryPointDataStoreDetails akan menjadi ArchiveStore.

Menyiapkan permintaan pemulihan

Ada berbagai opsi pemulihan untuk database PostgreSQL. Anda dapat memulihkan titik pemulihan sebagai database lain atau memulihkan sebagai file. Titik pemulihan juga dapat berada di tingkat arsip.

Pulihkan sebagai database

Susun ID Azure Resource Manager (ARM ID) dari database PostgreSQL baru. Anda perlu membuatnya dengan server PostgreSQL target tempat izin ditetapkan. Selain itu, buat nama database PostgreSQL yang diperlukan. Misalnya, database PostgreSQL dapat diberi nama emprestored21 di bawah server PostgreSQL target targetossserver dalam grup sumber daya targetrg dengan langganan yang berbeda.

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

Gunakan perintah az dataprotection backup-instance restore initialize-for-data-recovery untuk menyiapkan permintaan pemulihan dengan semua detail yang relevan.

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

Untuk titik pemulihan berbasis arsip, Anda perlu:

  1. Rehidrasi dari penyimpanan data arsip ke penyimpanan lemari besi
  2. Ubah sumber penyimpanan data
  3. Tambahkan parameter lain untuk menentukan prioritas rehidrasi
  4. Tentukan durasi titik pemulihan rehidrasi yang harus dipertahankan di penyimpanan data vault
  5. Pulihkan sebagai database dari titik pemulihan ini

Gunakan perintah berikut untuk menyiapkan permintaan untuk semua operasi yang disebutkan sebelumnya sekaligus.

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

Pulihkan sebagai file

Ambil Pengidentifikasi Sumber Daya Seragam (URI) dari kontainer, dalam akun penyimpanan pada izin yang ditetapkan. Misalnya, kontainer bernama testcontainerrestore di bawah akun penyimpanan testosstorageaccount dengan langganan yang berbeda.

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

Gunakan perintah az dataprotection backup-instans restore initialize-for-data-recovery-as-files untuk menyiapkan permintaan pemulihan dengan semua detail yang relevan.

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

Untuk titik pemulihan berbasis arsip, dalam skrip berikut:

  • Ubah sumber datastore.
  • Tambahkan prioritas rehidrasi dan durasi retensi, dalam hari, dari titik pemulihan rehidrasi.
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

Untuk memvalidasi apakah file JSON akan berhasil membuat sumber daya baru, gunakan perintah az dataprotection backup-instance validate-for-restore.

Memicu pemulihan

Gunakan perintah az dataprotection backup-instans restore trigger untuk memicu operasi pemulihan dengan permintaan yang disiapkan sebelumnya.

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

Pekerjaan pelacakan

Lacak semua pekerjaan menggunakan perintah az dataprotection job list. Anda dapat mencantumkan semua pekerjaan dan mengambil detail pekerjaan tertentu.

Anda juga dapat menggunakan Az.ResourceGraph untuk melacak pekerjaan di seluruh brankas Cadangan. Gunakan perintah az dataprotection job list-from-resourcegraph untuk mendapatkan pekerjaan relevan yang ada di semua vault Cadangan.

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

Langkah berikutnya