Garantir a integridade e disponibilidade dos dados é uma prioridade para qualquer ambiente de produção. No PostgreSQL, além dos backups lógicos com pg_dump
, você também pode fazer backups físicos mais rápidos e completos usando o pg_basebackup
.
Neste artigo, você vai aprender como funciona o pg_basebackup
, quando usá-lo e como automatizar backups físicos seguros e consistentes em seu ambiente PostgreSQL.
O que é o pg_basebackup
?
O pg_basebackup
é uma ferramenta nativa do PostgreSQL usada para criar backups físicos em nível de bloco, ou seja, uma cópia exata dos arquivos do cluster de dados.
Ele é ideal para backups completos de bancos de produção, réplicas físicas (streaming replication), e ambientes que exigem alta velocidade de restauração.
pg_basebackup vs pg_dump
Recurso | pg_basebackup | pg_dump |
---|---|---|
Tipo de Backup | Físico | Lógico |
Velocidade | Alta (blocos) | Moderada (SQL) |
Suporte a Replicação | Sim | Não |
Granularidade | Baixa (tudo ou nada) | Alta (tabelas, schemas) |
Ideal para | Produção, Réplicas | Testes, Dev, Export |
Pré-requisitos para usar o pg_basebackup
- Acesso ao servidor como usuário com permissão de superusuário
- O parâmetro
wal_level
do PostgreSQL configurado como replica ou superior - Um usuário com a role
REPLICATION
- Acesso habilitado no arquivo
pg_hba.conf
para conexões de replicação
Como Criar um Backup com pg_basebackup
🔹 1. Criar um usuário com permissão de replicação
No PostgreSQL:
sqlCREATE ROLE backupuser WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'senha_segura';
🔹 2. Ajustar pg_hba.conf
Adicione uma linha como:
host replication backupuser 0.0.0.0/0 md5
Reinicie o PostgreSQL após ajustes.
🔹 3. Executar o backup com pg_basebackup
bashpg_basebackup -h 127.0.0.1 -p 5432 -U backupuser -D /caminho/para/backup -F tar -z -P
Parâmetros principais:
-D
: destino do backup-F tar
: formato compactado (alternativa:plain
)-z
: comprimir com gzip-P
: mostrar progresso
🔒 Dica: use
.pgpass
para evitar a digitação da senha em scripts automatizados.
Automatizando com Crontab (Backup Diário)
Exemplo de agendamento diário às 2h da manhã:
0 2 * * * pg_basebackup -h 127.0.0.1 -U backupuser -D /backups/dia_$(date +\%F) -F tar -z -P
Restaurando um Backup com pg_basebackup
- Pare o PostgreSQL:
bashsudo systemctl stop postgresql
- Substitua os arquivos do
data_directory
com o conteúdo extraído do backup - Crie um arquivo
recovery.signal
(caso necessário em versões 12+) - Inicie o PostgreSQL:
bashsudo systemctl start postgresql
Boas Práticas
- Use discos separados para backups e dados
- Mantenha pelo menos 7 dias de backups rotacionados
- Combine com ferramentas como
rsync
ouborgbackup
para backups offsite - Use
archive_mode = on
e configure umarchive_command
para armazenar os WALs (Write-Ahead Logs)
Conclusão
Se você precisa de backups rápidos, completos e confiáveis, o pg_basebackup
é a solução ideal em ambientes PostgreSQL corporativos. Ele permite uma restauração rápida e é a base para arquiteturas de replicação e failover.