我尝试使用 Docker 和 bash 脚本(我使用 Coreos)设置 PostgreSQL 从属服务器。我还没有找到任何方法来提供有效的.pgpass
.
我知道我可以创建一个 PGPASSWORD 环境变量,但出于安全原因不想这样做(如此处所述,http://www.postgresql.org/docs/current/static/libpq-envars.html http://www.postgresql.org/docs/current/static/libpq-envars.html),并且因为每次使用 recovery.conf 文件时都应该可以访问该密码(对于primary_conninfo 变量)。
Dockerfile
# ...
# apt-get installs and other config
# ...
USER postgres
# Create role and db
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER replicator WITH ENCRYPTED PASSWORD 'THEPASSWORD';" &&\
psql --command "CREATE DATABASE db WITH OWNER replicator;"
# Set the pg_pass to allow connection to master
ADD ./pgpass.conf /home/postgres/.pgpass # pgpass.conf comes my root git folder
USER root
RUN chmod 0600 /home/postgres/.pgpass
在我的 bash 文件中
# ...
pg_basebackup -h host.of.master.ip -D /var/pgbackup/backup_data -U replicator -v -P
# ...
问题似乎是未读取 pgpass 文件。看来我应该使用我正在执行的用户的密码(https://serverfault.com/questions/526170/psql-fe-sendauth-no-password-supplied https://serverfault.com/questions/526170/psql-fe-sendauth-no-password-supplied),但在这种情况下,replicator 角色自然不是可用的 bash 用户。 (请注意,将 pgpass 复制到 /home/root 和 /home/postgres 都不起作用)。
注意:我的 pgpass 文件和远程数据库 conf
# pgpass.conf
host.of.master.ip:5432:replication:replicator:THEPASSWORD
host.of.master.ip:5432:*:replicator:THEPASSWORD
# pg_hba.conf
host replication replicator host.of.slave.ip/24 md5
你必须创建一个.pgpass
在将要运行命令的用户的主文件夹上(在本例中,postgres
)。文件的每一行都必须位于format http://www.postgresql.org/docs/current/static/libpq-pgpass.html hostname:port:database:username:password
并且支持通配符,因此您只需将数据库设置为“*”即可。
就我而言,我有这样的事情......
$ sudo echo "${PRIMARY_IP}:5432:*:${REPL_USER}:${REPL_PASS}" > /var/lib/postgresql/.pgpass
$ sudo chown postgres:postgres /var/lib/postgresql/.pgpass
$ sudo chmod 0600 /var/lib/postgresql/.pgpass
$ sudo -u postgres pg_basebackup -h $PRIMARY_IP -D /var/lib/postgresql/9.4/main -U ${REPL_USER} -v -P --xlog-method=stream
当我运行 docker 容器时,这些变量(例如 PRIMARY_IP)被设置-e PRIMARY_IP=x.x.x.x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)