Postgresql postgres pg#U basebackup can';找不到.pg_pass文件
我已成功设置了从主postgres docker容器到辅助postgres docker容器的复制流,每个容器在单独的ec2实例上作为任务运行。Postgresql postgres pg#U basebackup can';找不到.pg_pass文件,postgresql,amazon-web-services,docker,amazon-ec2,Postgresql,Amazon Web Services,Docker,Amazon Ec2,我已成功设置了从主postgres docker容器到辅助postgres docker容器的复制流,每个容器在单独的ec2实例上作为任务运行。 但是,我通过将主服务器上的复制用户作为信任保留在其pg_hba.conf中来做到这一点: 主机复制复制0.0.0.0/0信任 然后,当我将它切换到md5时,我想我可以简单地为复制用户在辅助服务器上设置密码,一切都会很好。没有 在辅助服务器上的初始化脚本中,当我调用 pg#U basebackup-h#{primary_ip}-p5432-D$PG
但是,我通过将主服务器上的复制用户作为信任保留在其pg_hba.conf中来做到这一点:
主机复制复制0.0.0.0/0信任
然后,当我将它切换到md5时,我想我可以简单地为复制用户在辅助服务器上设置密码,一切都会很好。没有
在辅助服务器上的初始化脚本中,当我调用
pg#U basebackup-h#{primary_ip}-p5432-D$PGDATA-U#{repl_user}-v-p-w--xlog method=stream
我最初收到密码提示。然后我添加了
-w
。这会给我一个错误:
pg_basebackup:无法连接到服务器:fe_sendauth:未提供密码
然后我发现在通用的postgres 9.6映像上没有postgres主目录,所以我添加了一个$PG_PASSFILE变量。这不起作用(权限很好,我甚至将它放在/tmp中,并将PG_PASSFILE=…传递到PG_basebackup行上,如本问题所示:(参见Raphael的评论))无论我做什么,pg_basebackup都会忽略.pg_pass文件 然后我尝试将一个卷装载为/home/postgres,但是使用AWS,我似乎无法在我创建的入口点init脚本中找到根。一切都以postgres用户的身份进行 有人克服了这个问题吗?
我正在以入口点脚本的形式运行辅助初始化代码。正如我所说,它可以作为信任运行,但添加密码会让我很痛苦。如果设置复制,则不再需要运行
pg\u basebackup
。添加-w
将始终为您提供fe_sendauth:no password supplied
如果您为本地到相应连接设置了信任
或对等
,这只是因为-w
代表——no password
PGPASSFILE指定用于查找的密码文件的名称。
如果未设置,则默认为~/.pgpass(参见第32.15节)
所以默认值是.pgpass
,而不是.pg\u pass
,当然您可以使用.pg\u pass
,设置导出PGPASSFILE=.pg\u pass
,但您可以使用pg\u PASSFILE
变量-right
因此,postgres忽略了这一点,它应该这样做
我将首先尝试使用600
权限在主目录中创建right.pgpass
如果要使用密码文件,还请注意不同的主\u conninfo
。
在备用服务器上的单独~/.pgpass文件中(将复制用作
数据库名称)。不要在中指定数据库名称
主连接信息字符串
谢谢你的回复。因为我是在脚本中运行的,所以我需要-w,以便它不会试图提示我。然后查找.pgpass文件。在AWSEC2实例上,postgres没有主目录,我无法创建主目录,因为脚本中没有sudo。即使我在命令行上设置PG_PASSFILE env var,它也不会使用它。我相信这与AWS/EC2/Docker环境有关。而且,如果没有pg_basebackup,我也不知道该怎么做。我将对此进行研究。我最终稍微改变了我的策略:我从postgres创建了自己的docker映像,创建了主目录,并自己设置了权限。然后,在postgres entrypoint init脚本中,我只是将.pgpass文件的值回显到其中。现在很好用。