Melhores práticas de backup para bancos PostgreSQL

Estratégias essenciais para garantir a segurança dos seus dados em produção.

Por que backups são críticos?

Backups são a última linha de defesa contra perda de dados. Falhas de hardware, erros humanos, bugs em aplicações e ataques maliciosos podem comprometer seus dados a qualquer momento. Uma estratégia de backup bem planejada pode literalmente salvar sua empresa de um desastre.

1. Tipos de backup no PostgreSQL

pg_dump e pg_dumpall (Backup Lógico)

Ideal para bancos pequenos e médios. Gera um arquivo SQL ou binário com todos os dados:

-- Backup de um banco específico (formato custom)
pg_dump -U postgres -d meudb -F c -f backup.dump

-- Backup em SQL puro
pg_dump -U postgres -d meudb -f backup.sql

-- Backup de todos os bancos
pg_dumpall -U postgres -f backup_all.sql

-- Restauração
pg_restore -U postgres -d meudb backup.dump

Backup Físico (PITR - Point-in-Time Recovery)

Para bancos grandes e recuperação granular no tempo. Permite voltar para qualquer momento específico:

-- Configure no postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'cp %p /backup/archive/%f'
max_wal_senders = 3

-- Inicie um backup base
SELECT pg_start_backup('backup-label');

-- Copie todos os arquivos do diretório data
-- rsync -av /var/lib/postgresql/data /backup/base/

-- Finalize o backup
SELECT pg_stop_backup();

2. A Estratégia 3-2-1

A regra de ouro para backups seguros:

3. Automação de backups

Script de backup automatizado

#!/bin/bash
# backup-postgres.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/postgres"
DB_NAME="meudb"
DB_USER="postgres"
RETENTION_DAYS=7

# Cria diretório se não existir
mkdir -p $BACKUP_DIR

# Executa backup
pg_dump -U $DB_USER -d $DB_NAME -F c -f "$BACKUP_DIR/backup_$DATE.dump"

# Verifica se backup foi bem-sucedido
if [ $? -eq 0 ]; then
    echo "✅ Backup realizado com sucesso: backup_$DATE.dump"
    
    # Remove backups antigos (mais de 7 dias)
    find $BACKUP_DIR -name "backup_*.dump" -mtime +$RETENTION_DAYS -delete
    
    # Upload para S3 (opcional)
    aws s3 cp "$BACKUP_DIR/backup_$DATE.dump" s3://meu-bucket/backups/
else
    echo "❌ Erro no backup!"
    exit 1
fi

Agendamento com cron

# Edite o crontab
crontab -e

# Backup diário às 2h da manhã
0 2 * * * /scripts/backup-postgres.sh >> /var/log/backup.log 2>&1

# Backup a cada 6 horas
0 */6 * * * /scripts/backup-postgres.sh

# Backup semanal completo (domingo 3h)
0 3 * * 0 /scripts/backup-full.sh

4. Testes de restauração

⚠️ Regra de ouro: Backup não testado = backup inexistente!

Teste seus backups regularmente para garantir que funcionam quando você realmente precisar:

-- 1. Crie um banco de teste
createdb test_restore

-- 2. Restaure o backup
pg_restore -U postgres -d test_restore backup.dump

-- 3. Verifique a integridade dos dados
psql -U postgres -d test_restore -c "SELECT count(*) FROM tabela_critica;"
psql -U postgres -d test_restore -c "SELECT * FROM usuarios LIMIT 10;"

-- 4. Teste queries importantes
psql -U postgres -d test_restore -c "SELECT * FROM pedidos WHERE status = 'pendente';"

-- 5. Limpe o banco de teste
dropdb test_restore

Checklist de teste de backup

5. Monitoramento de backups

Configure alertas para detectar problemas rapidamente:

Métricas para monitorar

Script de verificação

#!/bin/bash
# check-backup.sh

BACKUP_DIR="/backup/postgres"
ALERT_EMAIL="admin@empresa.com"
MAX_HOURS=25  # Alerta se último backup > 25h

# Verifica último backup
LAST_BACKUP=$(ls -t $BACKUP_DIR/*.dump | head -1)
BACKUP_AGE=$(($(date +%s) - $(stat -c %Y "$LAST_BACKUP")))
HOURS=$((BACKUP_AGE / 3600))

if [ $HOURS -gt $MAX_HOURS ]; then
    echo "⚠️ Último backup tem $HOURS horas!" | mail -s "ALERTA: Backup PostgreSQL" $ALERT_EMAIL
fi

6. Estratégias avançadas

Backup incremental com WAL

Economize espaço e tempo com backups incrementais:

-- Configure archive_command para salvar WAL files
archive_command = 'test ! -f /backup/wal/%f && cp %p /backup/wal/%f'

-- Backup base mensal + WAL diário
-- Permite restaurar para qualquer ponto no tempo

Retenção inteligente

# Política de retenção
- Diário: últimos 7 dias
- Semanal: últimas 4 semanas  
- Mensal: últimos 12 meses
- Anual: últimos 7 anos

7. CloudPG: Backups gerenciados

No CloudPG, backups são automáticos desde o dia 1:

Recursos inclusos

Conclusão

Uma estratégia de backup robusta é essencial para qualquer aplicação em produção. Siga as melhores práticas:

  1. ✅ Automatize os backups
  2. ✅ Use a regra 3-2-1
  3. ✅ Teste restaurações regularmente
  4. ✅ Monitore e alerte falhas
  5. ✅ Documente procedimentos
  6. ✅ Treine a equipe

Lembre-se: Não é "se" você vai precisar de um backup, mas "quando".

Próximos passos

Crie uma instância CloudPG e tenha backups automáticos, seguros e testados configurados desde o primeiro minuto, sem necessidade de scripts ou configurações manuais.