备份/恢复 dockerized PostgreSQL 数据库

新手上路,请多包涵

我正在尝试按照 Docker 网站上的说明备份/恢复 PostgreSQL 数据库,但数据未恢复。

数据库映像使用的卷是:

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

CMD 是:

 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"]

我使用以下命令创建数据库容器:

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

然后我连接另一个容器以手动插入一些数据:

 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>

然后创建 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

现在我删除用于数据库的容器并创建另一个同名的容器,并尝试恢复之前插入的数据:

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

但是表是空的,为什么数据没有正确恢复?

原文由 Carl Levasseur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 809
2 个回答

备份您的数据库

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

恢复您的数据库

cat your_dump.sql | docker exec -i your-db-container psql -U postgres

原文由 Forth 发布,翻译遵循 CC BY-SA 4.0 许可协议

备份数据库

生成sql:

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

要减小 sql 的大小,您可以生成压缩:

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

恢复数据库

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

恢复压缩的 sql:

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

PD:这是对我有用的东西的汇编,以及我从这里和其他地方得到的东西。我开始做出贡献,任何反馈将不胜感激。

原文由 Giovanni Aravena Morales 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题