Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como usar a CLI do Azure para restaurar bancos de dados PostgreSQL em um servidor do Banco de Dados do Azure para PostgreSQL que você fez backup por meio do Backup do Azure. Você também pode restaurar um banco de dados PostgreSQL usando o portal do Azure, o Azure PowerShell e a API REST.
Como um banco de dados PostgreSQL é um banco de dados PaaS (plataforma como serviço), não é suportada a opção de recuperação Original-Location (OLR) para restaurar substituindo o banco de dados existente (de onde os backups foram feitos). Você pode restaurar a partir de um ponto de recuperação para criar um novo banco de dados no mesmo servidor do Banco de Dados PostgreSQL do Azure ou em qualquer outro servidor PostgreSQL. Esta opção é chamada de Alternate-Location Recovery (ALR). O ALR ajuda a manter o banco de dados de origem e o banco de dados restaurado (novo).
Os exemplos neste artigo referem-se a um cofre de Backup existente nomeado TestBkpVault no grupo de recursos testBkpVaultRG.
Restaurar um banco de dados PostgreSQL com apoio
Configurar permissões
Um cofre de Backup usa uma identidade gerenciada para acessar outros recursos do Azure. Para restaurar de um backup, a identidade gerenciada do cofre de backup requer um conjunto de permissões no servidor do Banco de Dados do Azure para PostgreSQL para o qual o banco de dados deve ser restaurado.
Para atribuir as permissões relevantes para a identidade gerenciada atribuída pelo sistema de um cofre no servidor PostgreSQL de destino, consulte o conjunto de permissões necessárias para fazer backup de um banco de dados PostgreSQL.
Para restaurar o ponto de recuperação como arquivos para uma conta de armazenamento, a identidade gerenciada atribuída pelo sistema do cofre de Backup precisa de acesso na conta de armazenamento de destino.
Busca do ponto de recuperação relevante
Para listar todas as instâncias de backup em um cofre, use o comando az dataprotection backup-instance list. Em seguida, busque a instância relevante usando o az dataprotection backup-instance show comando.
Como alternativa, para os cenários em escala, você pode listar instâncias de backup entre cofres e assinaturas usando o 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-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
}
.
.
.
.
.
Depois de identificar a instância, busque o ponto de recuperação relevante usando o az dataprotection recovery-point list comando:
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"
}
Se você precisar buscar o ponto de recuperação da camada de arquivo morto, a variável type em recoveryPointDataStoreDetails será ArchiveStore.
Preparar a solicitação de restauração
Há várias opções de restauração para um banco de dados PostgreSQL. É possível restaurar o ponto de recuperação como outro banco de dados ou restaurar como arquivos. O ponto de recuperação também pode estar na camada de arquivar.
Restaurar como um banco de dados
Construa a ID do Azure Resource Manager do novo banco de dados PostgreSQL usando o servidor PostgreSQL de destino ao qual você atribuiu permissões. Além disso, construa o nome do banco de dados PostgreSQL necessário. Por exemplo, um banco de dados PostgreSQL pode ser nomeado emprestored21 em um servidor PostgreSQL de destino nomeado targetossserver no grupo targetrg de recursos com uma assinatura diferente:
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
Use o az dataprotection backup-instance restore initialize-for-data-recovery comando para preparar a solicitação de restauração com todos os detalhes relevantes:
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
Para um ponto de recuperação baseado em arquivo, você precisa:
- Reidratar do armazenamento de dados de arquivos para o repositório de cofres.
- Modifique o armazenamento de dados de origem.
- Adicionar outros parâmetros para especificar a prioridade de reidratação.
- Especificar a duração de retenção do ponto de recuperação reidratado no armazenamento de dados do cofre.
- Restaurar como um banco de dados desse ponto de recuperação.
Use o seguinte comando para preparar a solicitação para todas as operações mencionadas anteriormente ao mesmo tempo:
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
Restaurar como arquivos
Busque o URI do contêiner dentro da conta de armazenamento à qual você atribuiu permissões. O exemplo a seguir usa um contêiner nomeado testcontainerrestore em uma conta de armazenamento nomeada testossstorageaccount com uma assinatura diferente:
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
Use o az dataprotection backup-instance restore initialize-for-data-recovery-as-files comando para preparar a solicitação de restauração com todos os detalhes relevantes:
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
Para o ponto de recuperação baseado em arquivo morto, no seguinte script:
- Modifique o armazenamento de dados de origem.
- Adicione a prioridade de reidratação e a duração de retenção, em dias, do ponto de recuperação reidratado.
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
Para validar se o arquivo JSON terá êxito na criação de novos recursos, use o az dataprotection backup-instance validate-for-restore comando.
Disparar a restauração
Use o az dataprotection backup-instance restore trigger comando para disparar a operação de restauração com a solicitação preparada anteriormente:
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
Acompanhar trabalhos
Acompanhe trabalhos usando o az dataprotection job list comando. Você pode listar todos os trabalhos e buscar um detalhe de trabalho específico.
Você também pode usar Az.ResourceGraph para acompanhar os trabalhos em todos os cofres de Backup. Use o comando az dataprotection job list-from-resourcegraph para obter o trabalho relevante que está em todos os cofres de Backup:
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore