Nous allons configurer une réplication logique d’une table de la base de données de notre serveur linux sur une installation de postgresql sur un poste de travail windows.
La réplication permet d’avoir sur un poste distant une copie actualisée de la base de données centralisée. Cette copie ne sera pas utilisée pour les mises à jour locales, car elle sera en lecture seule. Par contre elle permet de travailler hors connexion et beaucoup plus rapidement, car les échanges entre la base centrale et le réplicat local ne contient que les mises à jours de la base centralisée.
Pour notre exemple, nous allons utiliser une table nommée institutions_partenaires, située dans une base de données nommée postgres sur un serveur.
Mise en place de la réplication sur la base du serveur (master)
Activation de la réplication logique de postgresql 10
Nous devons, tout d’abord, modifier le paramètre wal_level du fichier postgresql.conf , sur le serveur, en mettant la valeur logical.
Puis, vous devez redémarrer postgresql pour que la modification soit prise en compte.
Pour vérifier que la modification a bien été prise en compte, avec pgAdmin (ou par ligne de commande) exécutez la commande
show wal_level;
Création d’un utilisateur avec des privilèges de réplication
Pour créer un utilisateur, nommée rep avec les privilèges de réplication, exécutez la commande
CREATE ROLE rep REPLICATION LOGIN PASSWORD ‘Password’;
et pour lui donner les droits sur la table institutions_partenaires, rentrez la commande:
GRANT ALL ON institutions_partenaires TO rep;
Création d’une publication de la table
Pour créer la publication de la table, rentrez la commande suivante:
CREATE PUBLICATION publi_partenaires FOR TABLE institutions_partenaires ;
Pour finir la mise en place sur la partie serveur, vous devez autoriser l’utilisateur rep à se connecter à la base de données postgresql:
Ajoutez la ligne
# TYPE DATABASE USER CIDR-ADDRESS METHOD
Host postgres rep 0.0.0.0/0 md5
Dans le fichier pg_hba.conf.
Et redémarrez postgresql sur le serveur pour que la modification soit prise en compte.
Mise en place de la réplication sur le poste distant (slave)
Création de la table sur le poste distant
Tout d’abord, il faut créer la table institutions_partenaires dans la base du poste distant.
Une manière, parmi d’autres, est de copier la définition sql de la table du serveur et de l’exécuter sur le poste distant.
N’oubliez pas, avant d’exécuter la commande sql sur le poste distant d’enlever la dernière ligne
GRANT ALL ON TABLE public.institutions_partenaires TO rep;
car cet utilisateur n’existe pas sur le poste distant.
Par contre, n’oubliez pas de faire un GRANT pour les utilisateurs de la table sur le poste distant pour qu’ils puissent se connecter à la table. Les utilisateurs pourront utiliser alors les données contenues dans la table, mais ils ne pourront pas les modifier. Seules les update, insert et delete effectués sur la table maîtresse apparaîtront automatiquement dans la table esclave.
Création d’une souscription à la table
Pour souscrire la nouvelle table créée à la publication faite sur le serveur, rentrez la commande:
CREATE SUBSCRIPTION subscri_partenaires CONNECTION ‘dbname=postgres host=195.83.124.222 user=rep password=Password port=5433’ PUBLICATION publi_partenaires;
Une fois exécutée, rentrez la commande:
table institutions_partenaires;
pour vérifier que la réplication a bien eu lieu.
Chaque fois que la table maître sera mise à jour, les modifications seront répercutées sur la table esclave.
Merci pour ce super tuto bien détaillé! bien utile quand on doit gérer des bases de données identiques sur plusieurs serveur.
Florian
le mot host est en minuscul dans le fichier pg_hba.conf