Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save pogermano/e552015b98c99ddddbbae935a2fbf4b3 to your computer and use it in GitHub Desktop.

Select an option

Save pogermano/e552015b98c99ddddbbae935a2fbf4b3 to your computer and use it in GitHub Desktop.
Backup e Restauração do PostgreSQL no Docker

Guia Completo para Backup e Restauração do PostgreSQL no Docker Swarm

1. Introdução

Este guia cobre a configuração de volumes para o PostgreSQL no Docker Swarm, a criação de backups e a solução de erros comuns.


2. Configuração do Volume no Docker Swarm

O problema da perda de dados no PostgreSQL após um restart provavelmente está relacionado à configuração do volume no Docker Swarm. Para garantir a persistência dos dados, defina corretamente o volume no docker-compose.yml:

  postgres_backup:
    image: postgres:17
    networks:
      - traefik_public
    environment:
      - PGPASSWORD=123
    volumes:
      - postgres_backup:/backup
    command: >
      sh -c "while true; do
        pg_dump -h postgres -U postgres -d n8n > /backup/backup-$(date +%F_%H-%M-%S).sql;
        sleep 86400;
      done"
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager

volumes:
  postgres_data:
    external: true
    name: postgres_data
  postgres_backup:
    external: false

3. Backup do Banco de Dados

Para fazer backup do PostgreSQL manualmente:

docker exec -it <ID_DO_CONTAINER_POSTGRES> pg_dumpall -U postgres > backup_full.sql

Se quiser copiar o backup para a máquina host:

docker cp <ID_DO_CONTAINER_POSTGRES>:/backup_full.sql ./backup_full.sql

Para verificar o tamanho do backup:

ls -lh backup_full.sql

Se o arquivo estiver vazio, tente rodar o backup diretamente dentro do container:

docker exec -it <ID_DO_CONTAINER_POSTGRES> bash
pg_dumpall -U postgres > /backup/backup_full.sql
exit
docker cp <ID_DO_CONTAINER_POSTGRES>:/backup/backup_full.sql ./backup_full.sql

4. Restauração do Backup

Para restaurar um backup em um PostgreSQL novo:

docker exec -i <ID_DO_CONTAINER_POSTGRES> psql -U postgres < backup_full.sql

Se o volume antigo ainda contiver dados incompatíveis, remova o volume antes de reiniciar o serviço:

docker volume rm postgres_data

E recrie os serviços:

docker stack deploy -c docker-compose.yml meu_stack

5. Solução de Erros Comuns

5.1. Erro de Incompatibilidade de Versão

Se ao iniciar o container aparecer o erro:

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 14, which is not compatible with this version 17.0.

Isso indica que os dados do PostgreSQL 14 ainda estão armazenados no volume postgres_data, mas o serviço foi atualizado para a versão 17. Para resolver:

  1. Fazer backup dos dados antigos
docker exec -it <ID_DO_CONTAINER_POSTGRES_14> pg_dumpall -U postgres > backup_full.sql
  1. Remover o volume antigo
docker volume rm postgres_data
  1. Recriar o serviço com o PostgreSQL 17
docker stack deploy -c docker-compose.yml meu_stack
  1. Restaurar os dados
docker exec -i <ID_DO_CONTAINER_POSTGRES_17> psql -U postgres < backup_full.sql

6. Conclusão

Este guia detalha as melhores práticas para garantir que os dados do PostgreSQL sejam persistentes no Docker Swarm, evitando perdas após reinicializações e garantindo backups confiáveis. Se precisar de mais suporte, verifique os logs do container:

docker logs <ID_DO_CONTAINER_POSTGRES>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment