web-dev-qa-db-fra.com

Postgresql n'accepte pas la connexion de réplication

Réplication en streaming ancienne et simple. PostgreSQL: 9.2.7 Windows 8.1 64 bits

Mes clusters primaires et secondaires sont sur même machine Windows. J'ai déjà fait pg_start_backup () et tout, donc les deux nœuds ont exactement les mêmes données.

Maintenant, le problème avec la réplication est que la "connexion de réplication" du serveur esclave ne se connecte pas au serveur principal mais je peux me connecter en utilisant les mêmes paramètres en utilisant psql Shell. Je pense que le coupable est la chaîne de connexion dans le fichier recovery.conf de l'esclave:

primary_conninfo = 'Host = 127.0.0.1 port = 5432 user = postgres password = postgres'

J'ai essayé localhost, 0.0.0.0, lan IP tout mais le journal de pg indique:

 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

Maintenant, regardez mon pg_hba.conf de maître:

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

Comme si j'autorisais toutes les connexions possibles, l'esclave ne peut pas se connecter. Pouvez-vous m'aider?

20
Sachin Verma

Le nom de la base de données doit être replication car all ne couvre pas les connexions de réplication.

Host    replication    postgres             127.0.0.1/0               trust

La documentation PostgreSQL dit en outre:

La valeur replication spécifie que l'enregistrement correspond si une connexion de réplication est demandée (notez que les connexions de réplication ne spécifient aucune base de données particulière). Sinon, c'est le nom d'une base de données PostgreSQL spécifique. Plusieurs noms de base de données peuvent être fournis en les séparant par des virgules. Un fichier séparé contenant des noms de base de données peut être spécifié en précédant le nom de fichier par @.

27
Sachin Verma

Ajout de la ligne ci-dessous à pg_hba.conf et le rechargement ont fonctionné pour moi. Étant donné que le type est "local", il n'est pas nécessaire de spécifier explicitement une adresse.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   replication     postgres                                peer

Et n'oubliez pas de pg_ctl reload

3
Rogerlr

Une autre solution possible ici que j'ai rencontrée. Si vous effectuez une réplication logique et que la BASE DE DONNÉES est définie sur la réplication, cela ne fonctionnera pas. Il doit juste obtenir un paramètre régulier. Le paramètre replication est destiné à la réplication physique et non à la réplication logique.

Mec, celui-là a pris un peu de travail pour comprendre. J'espère que ça aide!

2
mlissner