首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >备份/还原PostgreSQL数据库

备份/还原PostgreSQL数据库
EN

Stack Overflow用户
提问于 2014-07-13 01:10:38
回答 14查看 297.4K关注 0票数 327

我正在尝试备份/还原一个PostgreSQL数据库,正如Docker网站上所解释的那样,但是数据没有恢复。

数据库映像使用的卷是:

代码语言:javascript
复制
VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]

而CMD是:

代码语言:javascript
复制
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"]

我使用以下命令创建DB容器:

代码语言:javascript
复制
docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME"

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

代码语言:javascript
复制
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存档:

代码语言:javascript
复制
$ 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

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

代码语言:javascript
复制
$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar 

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

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2015-04-28 07:50:24

备份数据库

代码语言:javascript
复制
docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

恢复数据库

代码语言:javascript
复制
cat your_dump.sql | docker exec -i your-db-container psql -U postgres
票数 837
EN

Stack Overflow用户

发布于 2020-08-16 10:36:31

备份数据库

生成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:这是对我有用的东西的汇编,也是我从这里和其他地方得到的。我开始做贡献,任何反馈都将不胜感激。

票数 81
EN

Stack Overflow用户

发布于 2019-02-06 03:55:32

我认为您也可以使用postgres备份容器,它将在给定的时间内备份数据库。

代码语言:javascript
复制
  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
票数 75
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24718706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档