Pular para o conteúdo principal

🐘 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)

  1. Acesse o servidor PostgreSQL.
  2. 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.conf do 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