Share via


Ripristinare i database PostgreSQL di Azure usando l'interfaccia della riga di comando di Azure

Questo articolo illustra come ripristinare i database PostgreSQL di Azure in un server PostgreSQL di Azure sottoposto a backup da Backup di Azure.

Essendo un database PaaS, l'opzione OLR (Original Location Recovery) da ripristinare sostituendo il database esistente (da cui sono stati eseguiti i backup) non è supportato. È possibile eseguire il ripristino da un punto di ripristino per creare un nuovo database nello stesso server PostgreSQL di Azure o in qualsiasi altro server PostgreSQL. Viene chiamato Alternate-Location Recovery (ALR) che consente di mantenere sia il database di origine che il database ripristinato (nuovo).

In questo articolo si apprenderà come:

  • Ripristinare per creare un nuovo database PostgreSQL

  • Tenere traccia dello stato dell'operazione di ripristino

Negli esempi si farà riferimento a un insieme di credenziali di backup esistente TestBkpVault, nel gruppo di risorse testBkpVaultRG .

Ripristinare un database PostgreSQL di cui è stato eseguito il backup

Impostare le autorizzazioni

L'insieme di credenziali di backup usa l'identità gestita per accedere ad altre risorse di Azure. Per eseguire il ripristino dal backup, l'identità gestita dell'insieme di credenziali di backup richiede un set di autorizzazioni nel server PostgreSQL di Azure in cui ripristinare il database.

Per assegnare le autorizzazioni pertinenti per l'identità gestita assegnata dal sistema dell'insieme di credenziali nel server PostgreSQL di destinazione, vedere il set di autorizzazioni necessarie per eseguire il backup del database PostgreSQL di Azure.

Per ripristinare il punto di ripristino come file in un account di archiviazione, l'identità gestita assegnata dal sistema dell'insieme di credenziali di backup richiede l'accesso all'account di archiviazione di destinazione.

Recuperare il punto di ripristino pertinente

Per elencare tutte le istanze di backup all'interno di un insieme di credenziali, usare il comando az dataprotection backup-instance list . Recuperare quindi l'istanza pertinente usando il comando az dataprotection backup-instance show . In alternativa, per gli scenari su larga scala , è possibile elencare le istanze di backup tra insiemi di credenziali e sottoscrizioni usando il comando az dataprotection backup-instance 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
  }
.
.
.
.
.

Dopo aver identificato l'istanza, recuperare il punto di ripristino pertinente usando il comando 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"
}

Se è necessario recuperare il punto di ripristino dal livello archivio, la variabile di tipo in recoveryPointDataStoreDetails sarà ArchiveStore.

Preparare la richiesta di ripristino

Sono disponibili varie opzioni di ripristino per un database PostgreSQL. È possibile ripristinare il punto di ripristino come un altro database o ripristinarli come file. Anche il punto di ripristino può essere a livello di archivio.

Ripristina come database

Costruire l'ID di Azure Resource Manager (ID ARM) del nuovo database PostgreSQL. È necessario crearlo con il server PostgreSQL di destinazione a cui sono state assegnate le autorizzazioni. Costruire anche il nome del database PostgreSQL necessario. Ad esempio, un database PostgreSQL può essere denominato emprestored21 in un server di destinazione del server PostgreSQL targetossserver nel gruppo di risorse targetrg con una sottoscrizione diversa.

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

Usare il comando az dataprotection backup-instance restore initialize-for-data-recovery per preparare la richiesta di ripristino con tutti i dettagli pertinenti.

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

Per un punto di ripristino basato su archivio, è necessario:

  1. Riattivare l'archivio dati dall'archivio all'archivio dell'insieme di credenziali
  2. Modificare l'archivio dati di origine
  3. Aggiungere altri parametri per specificare la priorità di riattivazione
  4. Specificare la durata per cui deve essere conservato il punto di ripristino riattivato nell'archivio dati dell'insieme di credenziali
  5. Eseguire il ripristino come database da questo punto di ripristino

Usare il comando seguente per preparare la richiesta per tutte le operazioni indicate in precedenza, contemporaneamente.

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

Ripristinare come file

Recuperare l'URI (Uniform Resource Identifier) del contenitore, all'interno dell'account di archiviazione a cui sono state assegnate le autorizzazioni. Ad esempio, un contenitore denominato testcontainerrestore in un account di archiviazione testossstorageaccount con una sottoscrizione diversa.

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

Usare il comando az dataprotection backup-instance restore initialize-for-data-recovery-as-files per preparare la richiesta di ripristino con tutti i dettagli pertinenti.

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

Per il punto di ripristino basato su archivio, nello script seguente:

  • Modificare l'archivio dati di origine.
  • Aggiungere la priorità di riattivazione e la durata di conservazione, in giorni, del punto di ripristino riattivato.
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

Per verificare se il file JSON riesce a creare nuove risorse, usare il comando az dataprotection backup-instance validate-for-restore .

Attivare il ripristino

Usare il comando az dataprotection backup-instance restore trigger per attivare l'operazione di ripristino con la richiesta preparata in precedenza.

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

Processo di rilevamento

Tenere traccia di tutti i processi usando il comando az dataprotection job list . È possibile elencare tutti i processi e recuperare un particolare dettaglio del processo.

È anche possibile usare Az.ResourceGraph per tenere traccia dei processi in tutti gli insiemi di credenziali di backup. Usare il comando az dataprotection job list-from-resourcegraph per ottenere il processo pertinente in tutti gli insiemi di credenziali di Backup.

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

Passaggi successivi