Skip to content
Backup no PostgreSQL com Barman

Backup no PostgreSQL com Barman

March 2, 2026

Backup no PostgreSQL com Barman

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

  1. Conceitos Fundamentais
  2. Pré-requisitos
  3. Instalação
  4. Configurando o PostgreSQL
  5. Configurando o Barman
  6. Verificando a Configuração
  7. Realizando Backups
  8. Gerenciando Backups
  9. Restaurando um Backup
  10. Políticas de Retenção
  11. Automatizando com Cron
  12. 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_basebackup e pg_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-cli

RHEL/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-cli

Importante: 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-cli

O 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-256

Substitua <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 = 10

4. Reiniciar o PostgreSQL

sudo systemctl restart postgresql

5. 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=1

Configurando 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 = auto

2. 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.conf

Adicione 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 = 2

Dica: O Barman carrega automaticamente todos os arquivos .conf do 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 pghost

A 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: OK

Se algum item mostrar FAILED, revise a etapa correspondente na configuração.

# Listar todos os servidores configurados
sudo -u barman barman list-servers

Realizando Backups

Primeiro backup manual

# Sintaxe: barman backup [OPÇÕES] NOME_DO_SERVIDOR
sudo -u barman barman backup pghost

Você pode dar um nome descritivo ao backup:

sudo -u barman barman backup --name "antes-da-atualizacao" pghost

Acompanhe 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 pghost

Saída de exemplo:

pghost 20260302T120000 - Sun Mar 02 12:00:00 2026 - Size: 1.5 GiB - WAL Size: 24.0 MiB

Ver detalhes de um backup específico

sudo -u barman barman show-backup pghost 20260302T120000

Verificar integridade dos WALs de um backup

sudo -u barman barman check-backup pghost 20260302T120000

Ver informações do servidor

sudo -u barman barman show-server pghost

Forçar a troca de WAL (para testar o arquivamento)

sudo -u barman barman switch-wal --force --archive pghost

Restaurando 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-restored

Para restaurar um backup específico pelo ID:

sudo -u barman barman restore pghost 20260302T120000 /var/lib/postgresql/data-restored

Restauraçã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-restored

Outras 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 postgresql

O 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 WEEKS

Por redundância

Mantém um número fixo de backups:

# Manter sempre os últimos 3 backups completos
retention_policy = REDUNDANCY 3

Aplicar 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 cron

Automatizando 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 -e

Adicione 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 all

Nota: O barman cron deve 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 all

Testar 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-restore

Seguranç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_streaming
chmod 600 /var/lib/barman/.pgpass
chown barman:barman /var/lib/barman/.pgpass

Compressão e espaço em disco

Habilite compressão para economizar espaço (configuração global):

[barman]
compression = gzip
# Alternativas: bzip2, pigz (gzip paralelo), custom

Conclusã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

Referências