【发布时间】:2015-05-11 14:58:14
【问题描述】:
我想有办法进入 Postgresql 容器并从中获取数据转储。
【问题讨论】:
标签: postgresql docker containers
我想有办法进入 Postgresql 容器并从中获取数据转储。
【问题讨论】:
标签: postgresql docker containers
从 UNIX 或 Windows 终端使用以下命令:
docker exec <container_name> pg_dump <schema_name> > backup
以下命令将只转储所有表中的插入:
docker exec <container_name> pg_dump --column-inserts --data-only <schema_name> > inserts.sql
【讨论】:
docker exec <container_name> pg_dump -U <user> --column-inserts --data-only <schema_name> > inserts.sql
export PGUSER=postgres 使其工作(postgres 9.6 中的 Testet)。
我有一个名为 postgres 的容器,其中安装了卷 -v /backups:/backups
要备份 gzip 数据库 my_db 我使用:
docker exec postgres pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz
现在我有
user@my-server:/backups$ ls
my_db-2016-11-30.tar.gz
【讨论】:
no such file or directory: /backups/my_db-2017-03-19.tar.gz,你知道为什么吗?
docker exec -t postgres bash -c 'pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz'解决了这个问题
tar gz,它只是在执行 gz,但您使用扩展名 tar 命名 SQL 文件,然后对其进行 gzip 压缩。如果您对其进行压缩,您会得到一个名为my_db-date.tar 的不可读文件,但如果您将 .tar 重命名为 .sql,它实际上是一个 SQL 文件。如果您确实想要.tar.gz 文件扩展名,您可能应该将其输出为“filename.gz”或使用tar -cz
虽然上面的挂载点解决方案看起来很有希望,但以下是经过多次迭代后唯一对我有用的解决方案:
docker run -it -e PGPASSWORD=my_password postgres:alpine pg_dump -h hostname -U my_user my_db > backup.sql
我的独特之处在于:我在数据库上有一个密码需要传入;需要传入标签(alpine);最后 psql 工具的 hosts 版本与 docker 版本不同。
【讨论】:
docker exec -e PGPASSWORD=mypass container pg_dump -U myuser mydb > file.bkup.sql
另一种解决方法是启动 postgre sql,并将挂载点指向 docker 中转储的位置。
喜欢docker run -v <location of the files>。
然后对 docker running 容器执行 docker inspect
docker inspect <image_id>
你可以在里面找到“Volumes”标签和一个相应的位置。转到该位置,你可以找到所有的 postgresql/mysql 文件。它对我有用。让我们知道这是否也对你有用。
祝你好运
【讨论】:
这个使用 container_name 而不是 database_scheme 的,对我有用:
docker exec {container_name} pg_dump -U {user_name} > {backup_file_name}
例如,对我来说,数据库名称、用户和密码应该在 docker-compose.yaml 中声明
我希望它可以帮助某人
【讨论】:
对于那些有权限的人,我使用以下命令成功执行了我的转储:
docker exec -i MY_CONTAINER_NAME /bin/bash -c "PGPASSWORD=MY_PASSWORD pg_dump -Fc -h localhost -U postgres MY_DB_NAME" > /home/MY_USER/db-$(date +%d-%m-%y).backup
【讨论】:
这将挂载密码并包含您的环境变量
docker run -it --rm \
--env-file <(env) \
-w /working \
--volume $(pwd):/working \
postgres:latest /usr/bin/pg_dump -Fc -h localhost -U postgres MY_DB_NAME" > /working/db-$(date +%d-%m-%y).backup
【讨论】:
要运行具有 Postgres 用户和密码的容器,您需要预先配置变量作为容器环境变量。 例如:
docker run -it --rm --link <container_name>:<data_container_name> -e POSTGRES_PASSWORD=<password> postgres /usr/bin/pg_dump -h <data_container_name> -d <database_name> -U <postgres_username> > dump.sql
【讨论】:
--link 是一项旧功能。