MySQL 5.0 - Le moteur de stockage "Federated"

Introduction

Le moteur de stockage « federated » a été introduit à partir de MySQL 5.0.3. Ce moteur de stockage permet d'introduire la fonctionnalité de tables proxy avec MySQL (comme avec les services C.I.S. de Sybase), fonctionnalité qui permet d'accéder aux données de tables existant physiquement dans des bases de données sur des serveurs MySQL distants.

Avec la version MySQL 5.0, seules des tables distantes de serveurs MySQL peuvent être visibles avec le moteur de stockage « federated ». Dans de futures versions, ces tables distantes pourront être des tables de bases de données Sybase, Oracle et autres SGBD.

Cet article se propose de regarder en profondeur ce qui se passe lors de l'utilisation des tables de type federated au sein de MySQL et montre clairement que les tables de type federated doivent être utilisées sur des tables de petite volumétrie ou bien en indiquant clairement des critères très restrictifs dans la sélection.

Cas pratique

Dans le cas pratique, deux serveurs MySQL DBA_T1_MYS et DBA_T2_MYS sont installés sur une même machine.

On désire pouvoir lire à partir du serveur DBA_T2_MYS la table t_asi_users existant dans la base de données cgcam du serveur DBA_T1_MYS.

Le moteur de stockage « federated » va permettre de mettre en œuvre cette technique : pour cela, la table t_asi_users sera créée localement dans la base de données cgcam_r du serveur DBA_T2_MYS et elle sera du type « federated », c'est-à-dire qu'elle ne référencera que la structure de la table distante t_asi_users du serveur DBA_T1_MYS ainsi que les paramètres de connexion au serveur DBA_T1_MYS pour lire les données de cette table.

Les tables de type « federated » seront plutôt appelées dans la suite de cet article des tables proxy et elles peuvent référencer tout type de table distante (MyISAM, InnoDB, ARCHIVE etc…).

Lors de la création d'une table proxy dans une base de données, le fichier de définition <table_name>.frm de la table proxy est uniquement créé.

Mise en œuvre du cas pratique

Vérification de la disponibilité du moteur « federated »

Sur le serveur DBA_T2_MYS, il faut que le moteur « federated » soit disponible. La variable serveur have_federated_engine permet de savoir si ce moteur est disponible :

mysql-DBA_T2_MYS > show variables like '%federated%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| have_federated_engine | YES   |
+-----------------------+-------+

Si le moteur de stockage « federated » n'est pas disponible :

  • soit la version standard est utilisée au lieu d'une version Max ou Pro
  • soit l'option --with-federated-storage-engine n'a pas été utilisée lors de la compilation de MySQL.

Création des tables proxy

Syntaxe de création des tables proxy

Pour créer une table proxy dans une base de données MySQL, les mots clés ENGINE=FEDERATED et CONNECTION='<connect_string>' sont utilisés dans la syntaxe de la création de la table.

CREATE TABLE <table_name> (
       [table_definition]
)
ENGINE=FEDERATED
CONNECTION='scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name'</table_name>

La chaîne CONNECTION définit les paramètres de connexion pour accéder au serveur distant hébergeant la table tbl_name dans la base de données db_name.

Exemples :

 CONNECTION='mysql://qry_cgcam_r:mot_de_passe@CGC:40102/cgcam/t_asi_users'
  • scheme est toujours mysql pour la version 5.0 de MySQL, ce mot clé a été introduit pour le support futur de tables proxy référençant des tables sur des serveurs distants autres que MySQL (comme Sybase ou Oracle).
  • La chaîne password est actuellement définie en clair dans le mot clé CONNECTION, aussi il faut faire attention aux informations de connexion utilisées et ne pas utiliser des users ayant trop de privilèges, car le mot de passe est accessible avec les commandes SHOW CREATE TABLE. Il faut garder à l'esprit que dans de futures versions, la chaîne CONNECTION subira des modifications pour pallier notamment à ce problème.
A la création de la table proxy, MySQL effectue une validation en se connectant au serveur distant spé