Synchroniser des tables avec FederatedX Sur MariaDB
FederatedX qu’est-ce que c’est :
FederatedX est un moteur de stockage pour MySQL/MariaDB qui permet à une instance de MySQL/MariaDB d’accéder de manière transparente aux tables situées sur d’autres serveurs MySQL/MariaDB. Il s’agit d’un composant des systèmes de bases de données fédérées, où une base de données peut interroger et manipuler des données réparties sur plusieurs systèmes.
Sur MariaDB, FederatedX n’est pas installé par défaut, nous allons donc l’installer.
Installation :
Tout d’abord, il faut vérifier si FederatedX n’est pas déjà installé. Pour ce faire, dans l’interface MariaDB, entrez la requête suivante :
SHOW ENGINES ;
Résultat :
Nous avons donc la liste des moteurs de base de données installés sur notre serveur, mais comme vous pouvez le voir, il n’y a pas de trace de FEDERATE.
Pour y remédier, nous allons utiliser l’ordre suivant :
INSTALL SONAME ‘ha_federatedx’ ;
Puis redémarrez MariaDB : (sur debian, sudo systemctl restart mariadb)
Utilisation
Dans ce tutoriel, on va prendre l’exemple de garages de même franchise qui voudrait synchroniser les clients et véhicules.
1. Création de la base d’origine
D’abord, nous avons besoin d’une base de données pour la franchise, dans laquelle nous allons créer des tables classiques, telles que « clients » et « véhicule » :
-- Creation des databases
|
2. Création des bases et de l’utilisateur
Maintenant, nous allons créer les bases de données qui contiendront les tables fédérées (les tables qui seront synchronisées avec la base d’origine), ici « garage1 » et « garage2 » :
CREATE DATABASE garage1; |
Ainsi qu’un utilisateur qui aura les droits sur les trois bases, si ce n’est pas déjà le cas :
CREATE USER 'AdminGarage' identified by 'm0tDePAssSecur'; |
3. Création des tables fédérés
Premièrement, nous allons avoir besoin d’une chaîne de connexion. Celle-ci pointera vers la table d’origine que nous souhaitons fédérer. Pour MariaDB et MySQL, elle se présente comme ceci :
mysql://username:password@hostname:port/database/tablename
Maintenant, dans garage1 et garage2, nous créons les tables « véhicule » et « clients » avec la même architecture que les tables d’origine.
Ensuite, nous spécifions d’utiliser l’engine « FEDERATED » que nous avons installé précédemment, ainsi que la chaîne de connexion pointant vers la table d’origine (nous utilisons ici l’utilisateur créé précédemment : AdminGarage).
use garage1;
| use garage2;
|
4. Testons :
Pour ce test, j’ai décidé d’importer les données dans la table « clients » de la base franchise, ainsi que dans la table « véhicule » de la base garage1 :
INSERT INTO franchise.clients (nom,prenom) |
Les tables étant censées être synchronisées, je devrais donc, en exécutant une requête SELECT dans la base garage2, récupérer les enregistrements des bases franchise et garage1. Alors, voyons :
Je vais sélectionner les enregistrements des deux tables jointes :
SELECT DISTINCT * FROM garage2.clients |
Source :