Partilhar via


Restaurar bancos de dados PostgreSQL usando o Azure PowerShell

Este artigo descreve como usar o Azure PowerShell 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, a CLI do Azure 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 :

$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault -ResourceGroupName "testBkpVaultRG"

Restaurar para criar um novo banco de dados PostgreSQL

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

Buscar todas as instâncias usando o Get-AzDataProtectionBackupInstance comando e identificar a instância relevante:

$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name

Você também pode usar Az.Resourcegraph e o comando Search-AzDataProtectionBackupInstanceInAzGraph para pesquisar pontos de recuperação em instâncias em muitos cofres e assinaturas:

$AllInstances = Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured

Para filtrar os critérios de pesquisa, use os recursos de pesquisa do cliente PowerShell:

Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured | Where-Object { $_.BackupInstanceName -match "empdb11"}

Depois de identificar a instância, busque o ponto de recuperação relevante:

$rp = Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName

Se você precisar buscar o ponto de recuperação na camada de arquivamento, adicione um filtro de cliente:

Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName | Where-Object {$_.Property.RecoveryPointDataStoresDetail[0].Type -match "Archive" }

Preparar a solicitação de restauração

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 a ser criado (com o servidor PostgreSQL de destino ao qual as permissões foram atribuídas, conforme detalhado anteriormente). Inclua 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 Initialize-AzDataProtectionRestoreRequest comando para preparar a solicitação de restauração com todos os detalhes relevantes:

$OssRestoreReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault

Para um ponto de recuperação baseado em arquivamento, você precisa:

  1. Reidratar do armazenamento de arquivo para o armazenamento de cofre.
  2. Modifique o armazenamento de dados de origem.
  3. Adicione outros parâmetros para especificar a prioridade de reidratação.
  4. Especifique a duração pela qual o ponto de recuperação reidratado deve ser mantido no armazenamento de dados do vault.
  5. 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:

$OssRestoreFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault -RehydrationDuration 12 -RehydrationPriority Standard

Restaurar como ficheiros

Buscar o URI do contêiner na conta de armazenamento à qual as permissões foram atribuídas, conforme detalhado anteriormente. 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 Initialize-AzDataProtectionRestoreRequest comando para preparar a solicitação de restauração com todos os detalhes relevantes:

$OssRestoreAsFilesReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" 

Para o ponto de recuperação baseado em arquivamento, modifique o armazenamento de dados de origem. Adicione a prioridade de reidratação e a duração da retenção, em dias, do ponto de recuperação reidratado:

$OssRestoreAsFilesFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" -RehydrationDuration "14" -RehydrationPriority Standard

Acionar a restauração

Use o Start-AzDataProtectionBackupInstanceRestore comando para acionar a restauração com a solicitação que você preparou anteriormente:

Start-AzDataProtectionBackupInstanceRestore -BackupInstanceName $AllInstances[2].BackupInstanceName -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Parameter $OssRestoreReq

Acompanhar tarefas

Rastreie trabalhos usando o Get-AzDataProtectionJob 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 Search-AzDataProtectionJobInAzGraph para obter o trabalho relevante que esteja em todos os cofres de backup.

$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -Operation OnDemandBackup