我已成功设置从主要到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 ,但添加该密码会让我感到害怕。
答案 0 :(得分:0)
如果设置复制,则不需要再运行pg_basebackup
。添加-w
将始终为您fe_sendauth: no password supplied
提供除trust
或peer
以外的任何内容以进行相应的连接 - 只是因为-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_conninfo
。
https://www.postgresql.org/docs/current/static/standby-settings.html
在备用服务器上的单独的〜/ .pgpass文件中(使用复制为 数据库名称)。不要在中指定数据库名称 primary_conninfo字符串。