postgres pg_basebackup找不到.pg_pass文件

时间:2017-05-26 22:19:27

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

我已成功设置从主要到postgres docker容器的复制流,每个容器在不同的ec2实例上作为任务运行。
但是,我通过将 replication 用户在主服务器上保留为pg_hba.conf中的 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,我似乎无法在我创建的入口点init脚本中生根。一切都是 postgres 用户。

有没有人克服这个?
我正在运行我的辅助初始化代码作为入口点脚本。就像我说的那样,它可以正常运行 trust ,但添加该密码会让我感到害怕。

1 个答案:

答案 0 :(得分:0)

如果设置复制,则不需要再运行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忽略它,它应该。

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

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

  

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