Postgresql 不接受复制连接

Sac*_*rma 21 postgresql replication

普通的旧流复制。PostgreSQL:9.2.7 Windows 8.1 64 位

我的主要和次要集群在同一台Windows 机器上。我已经完成了pg_start_backup()和所有事情,所以两个节点都有完全相同的数据。

现在复制的问题是从服务器的“复制连接”无法连接到主服务器,但我可以使用 psql shell 使用相同的参数进行连接。我认为罪魁祸首是 slave 的 recovery.conf 中的连接字符串:

primary_conninfo = 'host = 127.0.0.1 port = 5432 user = postgres password = postgres'
Run Code Online (Sandbox Code Playgroud)

我尝试了 localhost, 0.0.0.0, lan IP 除了 pg log 之外的所有内容:

 FATAL:  could not connect to the primary server: FATAL:  no pg_hba.conf entry for replication connection from host "127.0.0.1", user "postgres", SSL off
Run Code Online (Sandbox Code Playgroud)

现在看看我的Master的pg_hba.conf:

host     all     all     0.0.0.0/0   trust
host    all             postgres             127.0.0.1/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 md5
hostnossl    all     postgres    127.0.0.1/32    trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5
Run Code Online (Sandbox Code Playgroud)

就像我允许所有可能的连接但奴隶无法连接。你能帮忙吗?

Sac*_*rma 29

该数据库名必须replicationall不包括复制连接。

host    replication    postgres             127.0.0.1/0               trust
Run Code Online (Sandbox Code Playgroud)

PostgreSQL文档进一步说:

该值replication指定记录在请求复制连接时匹配(请注意,复制连接不指定任何特定数据库)。否则,这是特定 PostgreSQL 数据库的名称。可以通过用逗号分隔来提供多个数据库名称。可以通过在文件名前加上@.


mli*_*ner 6

我在这里遇到了另一种可能的解决方案。如果您正在进行逻辑复制并且将数据库设置为复制,则它将无法工作。它只需要获取一个常规参数。该replication参数适用于物理复制,不适用于逻辑复制。

伙计,这个问题需要花一些功夫才能弄清楚。我希望这有帮助!

  • 这需要更多的支持。我花了几个小时对 wal2json 插件进行故障排除,直到找到这个,这对我来说是正确的答案。wal2json 插件似乎使用逻辑复制,因此为了让示例 pg_recvlogic 命令正常工作,我需要将 pg_hba.conf 设置为使用“test”数据库名称而不是关键字“replication” (2认同)