将Postgresql数据库还原到Docker容器中,以便在Postgres启动时使用数据库
我有一个Postgresql数据转储文件。 我该如何将备份恢复到只有数据的容器中,以便在docker运行postgresql容器时进行还原?
由于Stackoverflow惩罚了简洁的答案,我重复了那里写的东西 :
- 创build一个只有数据的容器
- 运行一个临时Postgres容器来恢复备份。 附加仅数据容器和包含本地备份的目录。
- 附加到还原容器。 在容器内,
- 切换到postgresql用户
- 为数据库创build超级用户和匹配密码以进行恢复。
- 用\ q退出psql会话。 仍然在容器内,
- 在命令提示符下恢复备份
- 创build最终的Docker Postgres容器。 注意指定从上一步中恢复的数据库的正确名称。
- 将用于还原备份的容器删除到仅数据卷中
最简单的方法是在分开的文件夹中的主机上创build一个空的postgresql数据库,然后启动PostgreSQL守护进程,然后导入数据,然后简单地将其挂载到容器中。 使用下面的脚本可以在/tmp/postgres-mem
文件夹中创build数据库,然后将数据导入到该文件夹中。
#!/bin/bash export PGDIR=/tmp/postgres-mem pg_ctl -D "$PGDIR" stop rm -vfr "$PGDIR" mkdir "$PGDIR" pg_ctl init -D "$PGDIR" pg_ctl -D "$PGDIR" start -o "-h localhost -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c log_destination='stderr' -c logging_collector=on -c log_directory='pg_log' -c log_filename='postgresql-%Y-%m-%d_%H%M%S.log' -c log_statement='all' -k /tmp/postgres-mem" sleep 3 psql -h localhost -c 'create user cooluser with superuser' template1 psql -h localhost -c 'create database "whatever"' template1
接着
psql -U cooluser whatever < your_dump_file.sql
那么你将/ tmp / postgres-mem的内容复制到你的数据容器中
不过你可能要考虑这个方法 。