Bagikan melalui


Memulihkan database PostgreSQL dengan menggunakan Azure CLI

Artikel ini menjelaskan cara menggunakan Azure CLI untuk memulihkan database PostgreSQL ke server Azure Database for PostgreSQL yang Anda cadangkan melalui Azure Backup. Anda juga dapat memulihkan database PostgreSQL menggunakan portal Microsoft Azure, Azure PowerShell, dan REST API.

Karena database PostgreSQL adalah database platform as a service (PaaS), opsi Original-Location Recovery (OLR) untuk memulihkan dengan mengganti database yang ada (dari tempat cadangan diambil) tidak didukung. Anda dapat memulihkan dari titik pemulihan untuk membuat database baru di server Azure Database for PostgreSQL yang sama atau di server PostgreSQL lainnya. Opsi ini disebut Alternate-Location Recovery (ALR). ALR membantu menyimpan database sumber dan database yang dipulihkan (baru).

Contoh dalam artikel ini merujuk ke vault Backup yang sudah ada bernama TestBkpVault di bawah grup testBkpVaultRGsumber daya .

Pulihkan database PostgreSQL dari cadangan

Mengatur perizinan

Vault Backup menggunakan identitas terkelola untuk mengakses sumber daya Azure lainnya. Untuk memulihkan dari cadangan, identitas terkelola dari brankas Cadangan memerlukan serangkaian izin pada server Azure Database for PostgreSQL tempat database akan dipulihkan.

Untuk menetapkan izin yang relevan bagi identitas terkelola yang ditugaskan oleh sistem pada brankas di server PostgreSQL target, lihat kumpulan izin yang diperlukan untuk mencadangkan database PostgreSQL.

Untuk memulihkan titik pemulihan dalam bentuk file ke akun penyimpanan, identitas terkelola yang ditetapkan oleh sistem di brankas cadangan memerlukan akses ke akun penyimpanan target.

Dapatkan titik pemulihan yang relevan

Untuk mencantumkan semua instans cadangan dalam vault, gunakan az dataprotection backup-instance list perintah . Kemudian ambil instans yang relevan dengan menggunakan perintah az dataprotection backup-instance show.

Atau, untuk skenario dalam skala besar , Anda dapat mencantumkan instans cadangan di seluruh vault dan langganan dengan menggunakan az dataprotection backup-instance list-from-resourcegraph perintah :

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

Setelah Anda mengidentifikasi instans, ambil titik pemulihan yang relevan dengan menggunakan az dataprotection recovery-point list perintah :

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

Jika Anda perlu mengambil titik pemulihan dari lapisan arsip, variabel type di recoveryPointDataStoreDetails adalah 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 basis data

Buat ID Azure Resource Manager dari database PostgreSQL baru dengan menggunakan server PostgreSQL target tempat Anda menetapkan izin. Selain itu, buat nama database PostgreSQL yang diperlukan. Misalnya, database PostgreSQL dapat dinamai emprestored21 di bawah server PostgreSQL target bernama targetossserver dalam grup targetrg sumber daya dengan langganan yang berbeda:

$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 Gunakan perintah 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 datastore arsip ke datastore vault.
  2. Ubah sumber datastore.
  3. Tambahkan parameter lain untuk menentukan prioritas rehidrasi.
  4. Tentukan durasi di mana titik pemulihan yang direhidrasi harus dipertahankan di penyimpanan data vault.
  5. Pulihkan menjadi 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 URI kontainer dalam akun penyimpanan tempat Anda menetapkan izin. Contoh berikut menggunakan kontainer bernama testcontainerrestore di bawah akun penyimpanan bernama testossstorageaccount dengan langganan yang berbeda:

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

az dataprotection backup-instance restore initialize-for-data-recovery-as-files Gunakan perintah 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 penahanan, dalam hari, dari titik pemulihan yang direhidrasi.
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 az dataprotection backup-instance validate-for-restore perintah .

Memicu pemulihan

az dataprotection backup-instance restore trigger Gunakan perintah 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-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON

Pantau pekerjaan

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

Anda juga dapat menggunakan Az.ResourceGraph untuk melacak tugas di semua penyimpanan cadangan. Gunakan perintah az dataprotection job list-from-resourcegraph untuk mendapatkan tugas yang terkait yang ada di semua penyimpanan cadangan:

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