Pular para o conteúdo principal

Backup do Banco de Dados

Serviço de Backup

O backup automático do banco de dados é realizado pelo serviço toptic_pgbackups, que utiliza a imagem prodrigestivill/postgres-backup-local:14. Esse serviço é configurado no arquivo toptic-deploy.yml e realiza backups compactados (.sql.gz) do banco de dados Accessus de forma periódica.

Configuração

As configurações ficam no arquivo .env:

VariávelDescriçãoExemplo
DB_BACKUPDiretório onde ficam os arquivos de backup/toptic/db-backup
DB_BACKUP_SCHEDULEFrequência com que o backup é realizado@midnight
DB_BACKUP_KEEP_DAYSQuantidade de dias que os backups diários serão mantidos7
DB_BACKUP_KEEP_WEEKSQuantidade de semanas que os backups semanais serão mantidos4
DB_BACKUP_KEEP_MONTHSQuantidade de meses que os backups mensais serão mantidos6

Formato do agendamento (DB_BACKUP_SCHEDULE)

EntradaDescriçãoEquivalente a
@yearly (ou @annually)Executa uma vez por ano, à meia-noite, 1 de Jan.0 0 0 1 1 *
@monthlyExecuta uma vez por mês, à meia-noite, primeiro dia do mês0 0 0 1 * *
@weeklyExecuta uma vez por semana, à meia-noite entre Sáb/Dom0 0 0 * * 0
@daily (ou @midnight)Executa uma vez por dia, à meia-noite0 0 0 * * *
@hourlyExecuta uma vez por hora, no início da hora0 0 * * * *
Dica

Pode também ser utilizado o formato cron diretamente. Ex: DB_BACKUP_SCHEDULE=0 0 * * * *

Estrutura dos backups

Os arquivos de backup são organizados automaticamente dentro do diretório configurado em DB_BACKUP:

/toptic/db-backup/
├── last/ # Último backup realizado
├── daily/ # Backups diários
├── weekly/ # Backups semanais
└── monthly/ # Backups mensais

Como realizar o restore

Atenção

Substitua <HOST_IP> pelo endereço IP do servidor onde o banco de dados está rodando e <DB_PORT> pela porta configurada (padrão: 5432).

docker run --rm --tty --interactive \
-v /toptic/db-backup/last/accessus-latest.sql.gz:/tmp/backupfile.sql.gz \
postgres:14.9 /bin/sh -c \
"zcat /tmp/backupfile.sql.gz | psql --host=<HOST_IP> --port=<DB_PORT> --username=postgres --dbname=accessus -W"

Também é possível restaurar a partir de um backup específico (diário, semanal ou mensal):

docker run --rm --tty --interactive \
-v /toptic/db-backup/daily/accessus-20250101.sql.gz:/tmp/backupfile.sql.gz \
postgres:14.9 /bin/sh -c \
"zcat /tmp/backupfile.sql.gz | psql --host=<HOST_IP> --port=<DB_PORT> --username=postgres --dbname=accessus -W"