プレーンな古いストリーミングレプリケーション。 PostgreSQL:9.2.7 Windows 8.1 64ビット
私のプライマリおよびセカンダリクラスタはsame Windowsマシン上にあります。私はすでにpg_start_backup()とすべてを実行したので、両方のノードはまったく同じデータを持っています。
レプリケーションの問題は、スレーブサーバーからの「レプリケーション接続」がプライマリサーバーに接続しないことですが、psqlシェルを使用して同じパラメーターを使用して接続できます。私が犯人だと思うのは、スレーブのrecovery.confの接続文字列です。
primary_conninfo = 'Host = 127.0.0.1 port = 5432 user = postgres password = postgres'
私はlocalhost、0.0.0.0、LAN IPをすべて試しましたが、pgログには次のように書かれています:
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
今私のマスターの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
それは私が可能なすべての接続を許可したようにまだスレーブは接続できません。何かお手伝いできますか?
replication
はレプリケーション接続をカバーしないため、データベース名はall
である必要があります。
Host replication postgres 127.0.0.1/0 trust
PostgreSQLドキュメント はさらに次のように述べています。
値
replication
は、レプリケーション接続が要求された場合にレコードが一致することを指定します(レプリケーション接続は特定のデータベースを指定しないことに注意してください)。それ以外の場合、これは特定のPostgreSQLデータベースの名前です。複数のデータベース名をコンマで区切って指定できます。ファイル名の前に@
を付けると、データベース名を含む別のファイルを指定できます。
以下の行をpg_hba.conf
に追加してリロードするとうまくいきました。タイプが「ローカル」であることを考えると、アドレスを明示的に指定する必要はありません。
# TYPE DATABASE USER ADDRESS METHOD
local replication postgres peer
pg_ctl reload
を忘れないでください
ここで私が遭遇したもう1つの可能な解決策。 logicalレプリケーションを実行していて、DATABASEをレプリケーションに設定している場合、それは機能しません。通常のパラメータを取得する必要があります。 replication
パラメータは物理レプリケーション用であり、論理レプリケーション用ではありません。
男、それは理解するためにいくつかの仕事を取りました。これが役に立てば幸いです!