Copia de seguridad/restauración de una base de datos PostgreSQL dockerizada

Resuelto Carl Levasseur asked hace 10 años • 17 respuestas

Estoy intentando hacer una copia de seguridad/restaurar una base de datos PostgreSQL como se explica en el sitio web de Docker, pero los datos no se restauran.

Los volúmenes utilizados por la imagen de la base de datos son:

VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]

y el CMD es:

CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]

Creo el contenedor de base de datos con este comando:

docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME"

Luego conecto otro contenedor para insertar algunos datos manualmente:

docker run -it --rm --link "$DB_CONTAINER_NAME":db "$DB_IMAGE_NAME" sh -c 'exec bash'
psql -d test -h $DB_PORT_5432_TCP_ADDR
# insert some data in the db
<CTRL-D>
<CTRL-D>

Luego se crea el archivo tar:

$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /etc/postgresql /var/log/postgresql /var/lib/postgresql

Ahora elimino el contenedor usado para la base de datos y creo otro, con el mismo nombre, e intento restaurar los datos insertados antes:

$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar 

Pero las tablas están vacías, ¿por qué los datos no se restauran correctamente?

Carl Levasseur avatar Jul 13 '14 08:07 Carl Levasseur
Aceptado

Haga una copia de seguridad de sus bases de datos

docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql

Crea un nombre de archivo comodump_2023-12-25_09_15_26.sql

Si desea un tamaño de archivo más pequeño, utilice gzip:

docker exec -t your-db-container pg_dumpall -c -U postgres | gzip > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.gz

Si desea tamaños de archivo aún más pequeños, utilice brotlio bzip2:

docker exec -t your-db-container pg_dumpall -c -U postgres | brotli --best > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.br

o

docker exec -t your-db-container pg_dumpall -c -U postgres | bzip2 --best > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.bz2

Restaura tus bases de datos

cat your_dump.sql | docker exec -i your-db-container psql -U postgres
Forth avatar Apr 28 '2015 07:04 Forth

Base de datos de respaldo

generar sql:

  • docker exec -t your-db-container pg_dumpall -c -U your-db-user > dump_$(date +%Y-%m-%d_%H_%M_%S).sql

para reducir el tamaño del sql puedes generar una compresa:

  • docker exec -t your-db-container pg_dumpall -c -U your-db-user | gzip > ./dump_$(date +"%Y-%m-%d_%H_%M_%S").gz

Restaurar base de datos

  • cat your_dump.sql | docker exec -i your-db-container psql -U your-db-user -d your-db-name

para restaurar un sql comprimido:

  • gunzip < your_dump.sql.gz | docker exec -i your-db-container psql -U your-db-user -d your-db-name

PD: esta es una recopilación de lo que funcionó para mí y lo que obtuve de aquí y de otros lugares. Estoy empezando a hacer aportes, cualquier comentario será apreciado.

Giovanni Aravena Morales avatar Aug 16 '2020 10:08 Giovanni Aravena Morales

Creo que también puede utilizar un contenedor de copia de seguridad de Postgres que haga una copia de seguridad de sus bases de datos dentro de un período de tiempo determinado.

  pgbackups:
    container_name: Backup
    image: prodrigestivill/postgres-backup-local
    restart: always
    volumes:
      - ./backup:/backups
    links:
      - db:db
    depends_on:
      - db
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=${DB_NAME} 
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_EXTRA_OPTS=-Z9 --schema=public --blobs
      - SCHEDULE=@every 0h30m00s
      - BACKUP_KEEP_DAYS=7
      - BACKUP_KEEP_WEEKS=4
      - BACKUP_KEEP_MONTHS=6
      - HEALTHCHECK_PORT=81
Tharindu Pradeep avatar Feb 06 '2019 03:02 Tharindu Pradeep