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 :

Liste des moteurs de bases de données

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

CREATE DATABASE franchise;


CREATE TABLE clients(
id int not null auto_increment,
nom varchar(100),
prenom varchar(100),
primary key (id)
);

CREATE TABLE vehicule(
id int not null auto_increment,
immat varchar(100),
marque varchar(100),
modele varchar(100),
proprietaire_id int,
primary key (id),
foreign key(proprietaire_id) references clients(id)
);

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;
CREATE DATABASE garage2;

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';
GRANT ALL PRIVILEGES ON franchise.* TO 'AdminGarage';
GRANT ALL PRIVILEGES ON garage2.* TO 'AdminGarage';
GRANT ALL PRIVILEGES ON garage1.* TO 'AdminGarage';

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;
CREATE TABLE clients(
id int not null auto_increment,
nom varchar(100),
prenom varchar(100),
primary key (id)
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://AdminGarage:m0tDeP@ssSecur@localhost:3306/franchise/clients';


CREATE TABLE vehicule(
id int not null auto_increment,
immat varchar(100),
marque varchar(100),
modele varchar(100),
proprietaire_id int,
primary key (id),
foreign key(proprietaire_id) references clients(id)
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://AdminGarage:m0tDePAssSecur@localhost:3306/franchise/vehicule';
use garage2;
CREATE TABLE clients(
id int not null auto_increment,
nom varchar(100),
prenom varchar(100),
primary key (id)
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://AdminGarage:m0tDeP@ssSecur@localhost:3306/franchise/clients';


CREATE TABLE vehicule(
id int not null auto_increment,
immat varchar(100),
marque varchar(100),
modele varchar(100),
proprietaire_id int,
primary key (id),
foreign key(proprietaire_id) references clients(id)
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://AdminGarage:m0tDePAssSecur@localhost:3306/franchise/vehicule';

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)
VALUES("House","Gregory"),
("Wilson","James");
INSERT INTO garage1.vehicule (immat,marque,modele,proprietaire_id)
VALUES('BR-380-FM',"Toyota","Corolla",1),
('ZW-448-EZ',"Peugeot","3008",2);

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
INNER JOIN garage2.vehicule
ON garage2.clients.id = garage2.vehicule.proprietaire_id;
Liste des résultats de la requète ci-dessus

Source :

https://mariadb.com/kb/en/about-federatedx

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.