Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve como usar a CLI do Azure para restaurar bancos de dados PostgreSQL para um banco de dados do Azure para servidor PostgreSQL do qual 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 de plataforma como serviço (PaaS), a opção OLR (Original-Location Recovery) para restaurar substituindo o banco de dados existente (de onde os backups foram feitos) não é suportada. Você pode restaurar a partir de um ponto de recuperação para criar um novo banco de dados no mesmo Banco de Dados do Azure para o servidor PostgreSQL ou em qualquer outro servidor PostgreSQL. Essa opção é chamada de Alternate-Location Recovery (ALR). 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 sob o grupo testBkpVaultRGde recursos .
Restaurar uma base de dados PostgreSQL a partir de um backup
Configurar permissões
Um cofre de backup usa uma identidade gerenciada para acessar outros recursos do Azure. Para restaurar a partir de um backup, a identidade gerenciada do cofre de Backup requer um conjunto de permissões no Banco de Dados do Azure para o servidor PostgreSQL para o qual o banco de dados deve ser restaurado.
Para atribuir as permissões relevantes para a identidade gerida 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 ao sistema do cofre de backup precisa de acesso na conta de armazenamento de destino.
Buscar o ponto de recuperação relevante
Para listar todas as instâncias de backup em um cofre, use o az dataprotection backup-instance list comando. Em seguida, busque a instância relevante usando o az dataprotection backup-instance show comando.
Como alternativa, para cenários em escala, pode listar instâncias de backup em 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 precisar buscar o ponto de recuperação no nível de arquivamento, a type variável em recoveryPointDataStoreDetails é ArchiveStore.
Prepare o pedido de restauro
Existem várias opções de restauração para um banco de dados PostgreSQL. Você pode restaurar o ponto de recuperação como outro banco de dados ou restaurar como arquivos. Também é possível que o ponto de recuperação esteja na camada de arquivamento.
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, é necessário:
- Reidratar do armazenamento de arquivo para o armazenamento de cofre.
- Modificar o repositório de dados de origem.
- Adicione outros parâmetros para especificar a prioridade de reidratação.
- Especifique a duração pela qual o ponto de recuperação reidratado deve ser mantido no armazenamento de dados do vault.
- Restaure como um banco de dados a partir deste ponto de recuperação.
Use o seguinte comando para preparar a solicitação para todas as operações mencionadas anteriormente de uma só vez:
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 ficheiros
Buscar o URI do contêiner na conta de armazenamento à qual você atribuiu permissões. O exemplo a seguir usa um contêiner nomeado testcontainerrestore sob 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, no seguinte script:
- Modificar o repositório 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.
Inicie a restauração
Use o az dataprotection backup-instance restore trigger comando para acionar 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 tarefas
Rastreie trabalhos usando o az dataprotection job list comando. Você pode listar todos os trabalhos e buscar um detalhe específico do trabalho.
Você também pode usar Az.ResourceGraph para monitorizar tarefas em todos os cofres de backup. Utilize o comando az dataprotection job list-from-resourcegraph para obter o trabalho relevante que esteja em todos os cofres de backup.
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore