Backup no PostgreSQL com Barman: Tutorial Completo
Backup no PostgreSQL com Barman: Tutorial Completo
O Barman (Backup and Recovery Manager) é uma ferramenta open-source de administração para recuperação de desastres em servidores PostgreSQL. Desenvolvido e mantido pela EnterpriseDB, ele permite realizar backups remotos de múltiplos servidores, reduzindo riscos e facilitando a vida de DBAs em ambientes críticos.
Neste tutorial, vamos cobrir a instalação, configuração e uso do Barman para proteger seus dados PostgreSQL usando a versão 3.16.x (mais recente).
Sumário
- Conceitos Fundamentais
- Pré-requisitos
- Instalação
- Configurando o PostgreSQL
- Configurando o Barman
- Verificando a Configuração
- Realizando Backups
- Gerenciando Backups
- Restaurando um Backup
- Políticas de Retenção
- Automatizando com Cron
- Conclusão
Conceitos Fundamentais
Antes de começar, é importante entender os dois componentes centrais do Barman:
Tipos de Backup
| Tipo | Descrição |
|---|---|
| Base Backup | Cópia física completa dos arquivos de dados do PostgreSQL |
| WAL (Write-Ahead Log) | Logs de transação que permitem recuperação ponto-a-ponto (PITR) |
| Incremental | Backup que captura apenas os blocos modificados desde o último backup |
Estratégias de Backup
O Barman suporta duas estratégias principais:
- Streaming (recomendada): Usa o protocolo nativo de replicação do PostgreSQL via
pg_basebackupepg_receivewal. Não requer SSH entre os hosts. - Rsync + WAL Archiving: Usa SSH e rsync para transferência de arquivos. Requer conectividade SSH sem senha entre os servidores.
Neste tutorial, focaremos na estratégia de streaming, que é a mais moderna e recomendada.
Pré-requisitos
Você vai precisar de dois servidores (ou VMs/containers):
| Host | Papel |
|---|---|
pghost |
Servidor PostgreSQL (onde o banco de dados roda) |
barmanhost |
Servidor Barman (onde os backups serão armazenados) |
Requisitos mínimos:
- PostgreSQL 11 ou superior no
pghost - Python 3.6+ no
barmanhost - Conectividade de rede entre os dois hosts
- Espaço em disco suficiente no
barmanhost(tipicamente 2-3x o tamanho do banco)
Instalação
No servidor Barman (barmanhost)
Debian/Ubuntu:
# Adicione o repositório PGDG (recomendado)
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
# Instale o Barman
sudo apt install -y barman barman-cliRHEL/AlmaLinux/Rocky Linux:
# Adicione o repositório PGDG
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Instale o Barman
sudo dnf install -y barman barman-cliImportante: Evite misturar repositórios diferentes para pacotes do PostgreSQL e Barman. Use sempre o repositório PGDG para garantir compatibilidade.
No servidor PostgreSQL (pghost)
# Debian/Ubuntu
sudo apt install -y barman-cli
# RHEL/AlmaLinux
sudo dnf install -y barman-cliO pacote barman-cli instala os utilitários barman-wal-restore e barman-wal-archive, necessários no servidor de banco de dados.
Configurando o PostgreSQL
Todas as etapas a seguir são executadas no servidor PostgreSQL (pghost).
1. Criar os usuários de banco de dados
O Barman precisa de dois usuários com permissões específicas:
-- Conecte ao PostgreSQL como superusuário
sudo -u postgres psql
-- Usuário principal do Barman (superusuário para manutenção)
CREATE USER barman SUPERUSER PASSWORD 'senha_segura_barman';
-- Usuário para streaming de replicação
CREATE USER streaming_barman REPLICATION PASSWORD 'senha_segura_streaming';2. Configurar o pg_hba.conf
Adicione as seguintes linhas ao arquivo pg_hba.conf (normalmente em /etc/postgresql/<versão>/main/pg_hba.conf ou /var/lib/pgsql/data/pg_hba.conf):
# Acesso do Barman via conexão padrão
host all barman <IP_DO_BARMANHOST>/32 scram-sha-256
# Acesso do Barman para replicação via streaming
host replication streaming_barman <IP_DO_BARMANHOST>/32 scram-sha-256Substitua
<IP_DO_BARMANHOST>pelo endereço IP real do seu servidor Barman.
3. Configurar o postgresql.conf
Ajuste os seguintes parâmetros no postgresql.conf:
# Nível de WAL necessário para replicação e streaming
wal_level = replica
# Número máximo de conexões de replicação
max_wal_senders = 10
# Número de slots de replicação (para o Barman)
max_replication_slots = 104. Reiniciar o PostgreSQL
sudo systemctl restart postgresql5. Testar a conectividade a partir do Barman
Execute estes comandos no barmanhost para verificar a conectividade:
# Teste a conexão padrão
psql -h pghost -U barman -d postgres -c "SELECT version();"
# Teste a conexão de streaming
psql -h pghost -U streaming_barman -d postgres -c "IDENTIFY_SYSTEM;" replication=1Configurando o Barman
Todas as etapas a seguir são executadas no servidor Barman (barmanhost).
1. Configuração global (/etc/barman.conf)
O arquivo de configuração global define os padrões para todos os servidores. Edite ou verifique /etc/barman.conf:
[barman]
# Usuário do sistema que executa o Barman
barman_user = barman
# Diretório raiz onde os backups serão armazenados
barman_home = /var/lib/barman
# Diretório de logs
log_file = /var/log/barman/barman.log
log_level = INFO
# Configuração padrão de compressão
compression = gzip
# Número mínimo de backups a manter (segurança mínima)
minimum_redundancy = 1
# Política de retenção padrão
retention_policy = RECOVERY WINDOW OF 7 DAYS
retention_policy_mode = auto2. Configuração do servidor (/etc/barman.d/pghost.conf)
Crie um arquivo de configuração específico para o seu servidor PostgreSQL:
sudo nano /etc/barman.d/pghost.confAdicione o seguinte conteúdo:
[pghost]
description = "Servidor PostgreSQL principal"
# String de conexão padrão (usuário barman)
conninfo = host=pghost user=barman dbname=postgres port=5432
# String de conexão para streaming de replicação
streaming_conninfo = host=pghost user=streaming_barman dbname=postgres port=5432
# Método de backup: 'postgres' usa pg_basebackup (recomendado)
backup_method = postgres
# Habilita o arquivamento via streaming (pg_receivewal)
streaming_archiver = on
# Nome do slot de replicação
slot_name = barman
# Cria o slot automaticamente se não existir
create_slot = auto
# Política de retenção específica para este servidor (sobrescreve o global)
retention_policy = RECOVERY WINDOW OF 14 DAYS
minimum_redundancy = 2Dica: O Barman carrega automaticamente todos os arquivos
.confdo diretório/etc/barman.d/, permitindo gerenciar múltiplos servidores facilmente.
Verificando a Configuração
Antes de realizar o primeiro backup, verifique se tudo está configurado corretamente:
# Verificar a configuração do servidor
sudo -u barman barman check pghostA saída esperada deve mostrar todos os itens com OK:
Server pghost:
PostgreSQL: OK
superuser or standard user with backup privileges: OK
PostgreSQL streaming: OK
wal_level: OK
replication slot: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 0 backups, expected at least 1)
streaming: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: OK
archiver errors: OKSe algum item mostrar FAILED, revise a etapa correspondente na configuração.
# Listar todos os servidores configurados
sudo -u barman barman list-serversRealizando Backups
Primeiro backup manual
# Sintaxe: barman backup [OPÇÕES] NOME_DO_SERVIDOR
sudo -u barman barman backup pghostVocê pode dar um nome descritivo ao backup:
sudo -u barman barman backup --name "antes-da-atualizacao" pghostAcompanhe a saída para confirmar que o backup foi concluído com sucesso:
Starting backup using postgres method for server pghost in /var/lib/barman/pghost/base/20260302T120000
Backup start at LSN: 0/3000028 (000000010000000000000003, 00000028)
Starting backup copy via pg_basebackup for 20260302T120000
Copy done (time: 45 seconds)
Finalising the backup.
This is the first backup for the server pghost
WAL segments preceding the current backup have been found:
...
Backup size: 1.5 GiB
Backup end at LSN: 0/5000000 (000000010000000000000005, 00000000)
Backup completed (start time: 2026-03-02 12:00:00, elapsed time: 1 minute, 2 seconds)Gerenciando Backups
Listar backups disponíveis
sudo -u barman barman list-backups pghostSaída de exemplo:
pghost 20260302T120000 - Sun Mar 02 12:00:00 2026 - Size: 1.5 GiB - WAL Size: 24.0 MiBVer detalhes de um backup específico
sudo -u barman barman show-backup pghost 20260302T120000Verificar integridade dos WALs de um backup
sudo -u barman barman check-backup pghost 20260302T120000Ver informações do servidor
sudo -u barman barman show-server pghostForçar a troca de WAL (para testar o arquivamento)
sudo -u barman barman switch-wal --force --archive pghostRestaurando um Backup
Restauração completa
Para restaurar o backup mais recente em um diretório de destino:
sudo -u barman barman restore pghost latest /var/lib/postgresql/data-restoredPara restaurar um backup específico pelo ID:
sudo -u barman barman restore pghost 20260302T120000 /var/lib/postgresql/data-restoredRestauração com PITR (Point-In-Time Recovery)
O PITR permite restaurar o banco até um momento específico no tempo, usando os WALs arquivados:
sudo -u barman barman restore \
--target-time "2026-03-02 11:30:00" \
pghost 20260302T120000 \
/var/lib/postgresql/data-restoredOutras opções de alvo:
# Restaurar até uma transação específica
--target-xid 12345
# Restaurar até um LSN específico
--target-lsn 0/5000000
# Restaurar até um named restore point
--target-name "antes-da-atualizacao"Após a restauração
Após restaurar os arquivos, inicie o PostgreSQL no servidor de destino:
sudo systemctl start postgresqlO PostgreSQL entrará em modo de recuperação e aplicará os WALs automaticamente até o ponto alvo.
Políticas de Retenção
O Barman suporta dois modelos de política de retenção, configurados no arquivo do servidor:
Por janela de recuperação (recomendado)
Mantém backups suficientes para cobrir uma janela de tempo:
# Manter backups dos últimos 14 dias
retention_policy = RECOVERY WINDOW OF 14 DAYS
# Manter backups dos últimos 4 semanas
retention_policy = RECOVERY WINDOW OF 4 WEEKSPor redundância
Mantém um número fixo de backups:
# Manter sempre os últimos 3 backups completos
retention_policy = REDUNDANCY 3Aplicar a política manualmente
# Verificar quais backups seriam removidos
sudo -u barman barman retention-policy-check pghost
# Aplicar a política e remover backups obsoletos
sudo -u barman barman cronAutomatizando com Cron
O Barman possui um comando cron que deve ser executado periodicamente para:
- Verificar e gerenciar o arquivamento de WALs
- Aplicar políticas de retenção
- Manter a consistência dos backups
Configurar o crontab do usuário barman
sudo -u barman crontab -eAdicione as seguintes linhas:
# Executar o cron do Barman a cada minuto (para arquivamento de WAL em tempo real)
* * * * * /usr/bin/barman cron
# Backup diário às 2h da manhã
0 2 * * * /usr/bin/barman backup all
# Verificação semanal da integridade (opcional)
0 6 * * 0 /usr/bin/barman check allNota: O
barman crondeve ser executado com frequência (pelo menos a cada minuto) para garantir o arquivamento contínuo dos WALs. O backup propriamente dito pode ser menos frequente conforme sua política de RPO/RTO.
Dicas e Boas Práticas
Monitoramento
Verifique regularmente o status dos seus backups:
# Status de todos os servidores
sudo -u barman barman status all
# Diagnóstico completo
sudo -u barman barman check allTestar restaurações periodicamente
Backups sem teste de restauração são apenas esperança. Agende restaurações de teste em ambientes isolados regularmente:
# Restaurar em ambiente de staging para validação
sudo -u barman barman restore pghost latest /tmp/test-restoreSegurança das credenciais
Use o arquivo ~/.pgpass do usuário barman para armazenar as senhas de forma segura, evitando expô-las nos arquivos de configuração:
# Arquivo: /var/lib/barman/.pgpass
# Formato: host:port:database:user:password
pghost:5432:postgres:barman:senha_segura_barman
pghost:5432:replication:streaming_barman:senha_segura_streamingchmod 600 /var/lib/barman/.pgpass
chown barman:barman /var/lib/barman/.pgpassCompressão e espaço em disco
Habilite compressão para economizar espaço (configuração global):
[barman]
compression = gzip
# Alternativas: bzip2, pigz (gzip paralelo), customConclusão
O Barman é uma solução robusta e madura para backup e recuperação de servidores PostgreSQL. Com ele, você obtém:
- Backups físicos confiáveis e consistentes
- PITR (Point-In-Time Recovery) para restaurar até qualquer momento coberto pelos WALs
- Gerenciamento centralizado de múltiplos servidores PostgreSQL
- Políticas de retenção automáticas
- Streaming contínuo de WALs sem necessidade de SSH
Para ambientes de produção, considere também:
- Barman Cloud: extensão que permite enviar backups diretamente para S3, GCS ou Azure Blob Storage
- CloudNativePG: operador Kubernetes que usa o barman-cloud nativamente para backups em clusters Kubernetes