🐘 Restauração Física do PostgreSQL com pg_basebackup
O pg_basebackup é utilizado para realizar a restauração física completa do PostgreSQL, sendo indicado para reconstrução de nós, replicação, recuperação de falhas críticas e rebuild controlado de ambientes.
📌 Quando utilizar este procedimento
- Corrupção do diretório de dados (
PGDATA) - Nó perdeu sincronização com o primário
- Recriação de réplica PostgreSQL
- Recuperação após falha grave
- Rebuild completo do banco
⚠️ Atenção: este procedimento remove integralmente os dados locais do nó de destino.
⚙️ Pré-requisitos
Antes de iniciar, certifique-se de que:
- PostgreSQL esteja instalado e compatível
- Usuário de replicação esteja configurado (ex:
replication) - Haja conectividade com o nó primário
- O serviço PostgreSQL esteja parado
- Haja espaço em disco suficiente
🔍 Identificar o diretório de dados (PGDATA)
- Acesse o servidor PostgreSQL.
- Execute o comando abaixo para identificar o diretório de dados utilizado pelo banco.
Verificando data_directory
sudo -u postgres psql -c "SHOW data_directory;"
Exemplo de retorno:
/var/lib/pgsql/data
2. Parar o serviço PostgreSQL
Antes da restauração física, o PostgreSQL deve estar completamente parado.
sudo systemctl stop postgresql
Confirme que não há processos ativos:
ps aux | grep '[p]ostgres'
3. Limpar o diretório de dados
⚠️ Este passo é irreversível.
Remove todo o conteúdo atual do banco de dados.
sudo rm -rf /var/lib/pgsql/data/*`
4. Executar a restauração com pg_basebackup
Execute a restauração física diretamente a partir do nó primário.
PGPASSWORD='SENHA_DO_USUARIO_REPLICATION' \
pg_basebackup \
-h 10.100.0.00 \
-p 5432 \
-U replication \
-D /var/lib/pgsql/data \
-X stream \
-P
Parâmetros utilizados
-
-h→ Endereço IP do nó primário -
-p→ Porta do PostgreSQL -
-U→ Usuário de replicação -
-D→ Diretório de dados (PGDATA) -
-X stream→ Transmissão contínua dos WALs -
-P→ Exibe progresso da operação
5. Ajustar permissões do diretório
Após a conclusão do pg_basebackup, ajuste as permissões do diretório restaurado.
chown -R postgres:postgres /var/lib/pgsql/data
6. Iniciar o PostgreSQL
Inicie novamente o serviço PostgreSQL.
sudo systemctl start postgresql
Ou, se aplicável:
sudo systemctl start postgresql-17
✅ Validações Pós-Restauração
Verificar status do serviço
systemctl status postgresql
Confirmar acesso ao banco
sudo -u postgres psql
🔁 Ambientes com Replicação
Em ambientes com replicação configurada:
-
O nó restaurado torna-se réplica
-
A sincronização ocorre automaticamente após o start
-
Compatível com:
-
repmgr -
patroni -
Replicação nativa do PostgreSQL
-
📌 Sempre valide o status da réplica após a restauração.
🧠 Boas Práticas
-
Utilize usuário exclusivo para replicação
-
Execute o procedimento em janela de manutenção
-
Monitore espaço em disco durante o restore
-
Teste periodicamente o processo de rebuild
-
Acompanhe logs e métricas após a restauração
🛠️ Troubleshooting
Falha de conexão no pg_basebackup
-
Verifique regras no
pg_hba.confdo nó primário -
Confirme permissões do usuário de replicação
PostgreSQL não inicia após o restore
-
Verifique permissões do diretório
-
Analise logs do PostgreSQL
-
Confirme compatibilidade de versão
Replicação não sincroniza
-
Verifique
primary_conninfo -
Confirme disponibilidade de WALs no primário
📎 Observações Finais
-
Este procedimento não é reversível
-
Sempre valide o nó primário antes da execução
-
Documente o processo para auditoria e Disaster Recovery