【问题标题】:postgres pg_basebackup can't find .pg_pass filepostgres pg_basebackup 找不到 .pg_pass 文件
【发布时间】:2017-10-27 21:28:42
【问题描述】:

我已成功设置了从主 postgres docker 容器到辅助 postgres docker 容器的复制流,每个容器作为任务在不同的 ec2 实例上运行。
但是,我通过在其 pg_hba.conf 中将主服务器上的 replication 用户保留为 trust 来做到这一点: host replication replication 0.0.0.0/0 trust

然后,当我将它切换到 md5 时,我想我可以简单地在辅助服务器上为复制用户设置一个密码,一切都会好起来的。没有。

在我的辅助初始化脚本中,当我调用 pg_basebackup -h #{primary_ip} -p 5432 -D $PGDATA -U #{repl_user} -v -P -w --xlog-method=stream 我最初得到了密码提示。
然后我添加了-w。这会给我错误:
pg_basebackup: could not connect to server: fe_sendauth: no password supplied

然后我发现通用 postgres 9.6 映像上没有 postgres 主目录,所以我添加了一个 $PG_PASSFILE 变量。那没有用(权限很好,我什至把它放在 /tmp 中,并在 pg_basebackup 行上传递了 PG_PASSFILE=... 就像在这个问题中一样:.pgpass for PostgreSQL replication in Dockerized environment(请参阅 Raphael 的评论))
无论我做什么,pg_basebackup 都会忽略 .pg_pass 文件。

然后我尝试将卷挂载为 /home/postgres 但使用 AWS,我似乎无法在我创建的入口点初始化脚本中进入根目录。一切都以 postgres 用户身份。

有人克服过这个吗?
我正在将我的辅助初始化代码作为入口点脚本运行。就像我说的,它作为 trust 可以正常工作,但是添加该密码会杀死我。

【问题讨论】:

    标签: postgresql amazon-web-services docker amazon-ec2


    【解决方案1】:

    如果您设置复制,则不再需要运行pg_basebackup。添加-w 将始终为您提供fe_sendauth: no password supplied,如果您为本地到相应的连接设置trustpeer 以外的任何内容 - 只是因为-w 代表--no-password

    https://www.postgresql.org/docs/current/static/libpq-envars.html

    PGPASSFILE 指定用于查找的密码文件的名称。 如果未设置,则默认为 ~/.pgpass(参见第 32.15 节)。

    所以默认是.pgpass,而不是.pg_pass,当然你可以使用.pg_pass,设置export PGPASSFILE=.pg_pass,但是你使用PG_PASSFILE变量——对吗?..

    所以 postgres 会忽略它,它应该忽略它。

    我会首先尝试在具有600 权限的主目录中创建正确的.pgpass

    如果您想使用密码文件,请注意不同的primary_conninfohttps://www.postgresql.org/docs/current/static/standby-settings.html

    在备用服务器上单独的 ~/.pgpass 文件中(使用复制作为 数据库名称)。不要在 primary_conninfo 字符串。

    【讨论】:

    • 感谢您的回复。由于我在脚本中运行,因此我需要 -w 以便它不会尝试提示我。然后它会查找 .pgpass 文件。在 AWS EC2 实例上,postgres 没有主目录,我无法创建主目录,因为脚本中没有 sudo。即使我在命令行上设置了 PG_PASSFILE env var,它也不会使用它。我相信它与 AWS/EC2/Docker 环境有关。
    • 另外,如果没有 pg_basebackup,我不知道该怎么做。我会调查的。
    • 我最终稍微改变了我的策略:我从 postgres 创建了自己的 docker 映像,并创建了主目录并自己设置了权限。然后,在 postgres 入口点初始化脚本中,我只是将 .pgpass 文件的值回显到其中。现在可以正常使用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2018-05-14
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多