Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Généralités sur MariaDB

Introduction

MariaDB est dérivé de MySQL. Par conséquent, les lecteurs familiers avec MySQL se sentiront très vite à l’aise avec MariaDB, puisque le fonctionnement du serveur et son environnement sont quasiment identiques.

Voici quelques questions courantes que nous allons souvent nous poser dès que nous voudrons utiliser MariaDB :

  • MariaDB est-il compatible avec MySQL ? La réponse à cette question n’est pas si simple. L’interface SQL des deux serveurs est quasiment à 100 % identique, ce qui signifie qu’une requête fonctionnant avec MySQL a toutes les chances de fonctionner également avec MariaDB. Mais certaines fonctionnalités ont été développées de manière indépendante dans les deux produits : dans ce cas, les variables de configuration sont le plus souvent très différentes et les restrictions d’utilisation ne sont pas non plus nécessairement les mêmes. D’une manière générale, MariaDB a tendance à diverger de plus en plus de MySQL. La plupart des nouvelles fonctionnalités de MariaDB ne sont donc pas toujours compatibles avec leurs équivalentes en MySQL.

  • Peut-on migrer facilement de MySQL à MariaDB ? Une telle migration est souvent réalisée en utilisant la réplication : le serveur maître...

Architecture

1. Le serveur et les clients

Tout comme pour MySQL, le serveur MariaDB (mysqld) intercepte les requêtes émises par les clients, transforme ces requêtes en un plan d’exécution, récupère les données selon le plan d’exécution généré, et enfin retourne le résultat au client. Il se compose de plusieurs modules chargés de gérer :

  • Les protocoles de communication avec les clients (TCP/IP, socket, SSL...).

  • Les droits d’accès aux différentes ressources disponibles (voir chapitre Sécurité et gestion des utilisateurs).

  • Les caches afin de minimiser les accès disque.

  • Les différents types de journaux serveurs (binaire, requêtes lentes...).

  • L’analyse, l’optimisation et l’exécution des requêtes.

  • Le stockage des données.

Le diagramme suivant résume les différents modules du serveur :

images/01EI01N.png

Chaque distribution de MariaDB contient plusieurs clients en ligne de commande pour interagir avec le serveur, les plus utilisés étant :

  • mysql : pour exécuter des requêtes.

  • mysqldump : pour effectuer des sauvegardes logiques.

  • mysqladmin : pour effectuer des opérations d’administration (par exemple, consultation des statistiques du serveur, interruption des requêtes prenant trop de temps, changement de mots de passe)....

Utilisation des ressources matérielles

1. Utilisation du disque

Les données sont stockées sur disque afin d’assurer leur persistance. Sur votre serveur MariaDB vous retrouverez ainsi :

  • Les schémas (ou bases de données) qui sont représentés sur le disque par des répertoires du même nom. Ainsi, le schéma world a également pour nom de répertoire world.

  • Des fichiers qui ont comme extension .frm. Ils contiennent la structure des tables (frm pour format). D’un point de vue SQL, une table appartient à un schéma, ce qui sur le disque se traduit par au moins un fichier (celui qui contient la structure de la table), dans un répertoire. Par exemple, la table City qui appartient au schéma world est représentée sur le disque par le fichier City.frm localisé dans le répertoire world. Les données et les index se retrouvent dans un ou plusieurs fichiers ou uniquement en mémoire, tout dépend du moteur de stockage. Cette partie de l’architecture est détaillée dans la section Les moteurs de stockage.

  • Les journaux du serveur (journal binaire, journal des erreurs...), ceux des moteurs de stockage (ib_logfile0 pour InnoDB par exemple), de la réplication, le fichier de configuration…

  • Les déclencheurs (triggers).

Par défaut, tous ces fichiers sont stockés dans un unique répertoire appelé répertoire de données....

Les moteurs de stockage

L’une des originalités de MariaDB est le concept de moteurs de stockage. Chaque moteur doit offrir un socle commun de fonctionnalités, mais il est possible d’ajouter des fonctionnalités manquantes au serveur. Un exemple classique est celui des clés étrangères : bien que la syntaxe soit reconnue par le serveur, les clés étrangères ne déclenchent aucune action spécifique de la part du serveur. Néanmoins, le moteur InnoDB offre le support des clés étrangères, ce qui n’est pas le cas du moteur MyISAM par exemple.

Cette architecture présente cependant des inconvénients. Les moteurs ne sont pas tous équivalents en termes de performances : si le moteur X possède une fonctionnalité qui n’est pas disponible avec votre moteur actuel, il n’est pas garanti que le moteur X soit aussi rapide. Les moteurs ne sont pas non plus tous équivalents en termes de sécurité des données : InnoDB, par exemple, a la capacité de récupérer automatiquement les données en cas d’arrêt intempestif, tandis que la même situation provoquera sans doute une perte de données avec MyISAM.

Enfin, bien qu’il puisse être tentant de choisir un moteur de stockage pour chacune des tables, il n’est pas simple d’administrer un serveur pour lequel plusieurs moteurs de stockage sont utilisés : la mémoire physique du serveur doit être partagée entre les différents moteurs, les sauvegardes sont plus difficiles, diagnostiquer les problèmes est plus compliqué. Pour ces raisons, il est fortement recommandé de n’utiliser qu’un seul moteur de stockage.

Le choix du moteur se fait à la création de la table, dans l’ordre SQL CREATE TABLE en renseignant la clause ENGINE.


mysql> CREATE TABLE ma_table (i INT) ENGINE=InnoDB; 
Query OK, 0 rows affected (0,24 sec) 
 

Pour connaître le moteur de stockage d’une table, vous pouvez utiliser la commande SHOW CREATE TABLE :


mysql> SHOW CREATE TABLE ma_table \G 
*************************** 1. row *************************** 
Table: ma_table 
Create Table: CREATE TABLE `ma_table` ( 
`i` int(11) DEFAULT NULL 
  ) ENGINE=InnoDB;...

Verrous et transactions

Imaginez que vous ouvrez un fichier pour lire son contenu et qu’au même moment un autre utilisateur ouvre ce fichier pour le modifier. Vous risquez de lire un contenu incohérent, puisqu’une partie aura été modifiée en cours de route. Si vous voulez être certain de pouvoir lire le fichier sans que personne ne le modifie, vous devez le signaler aux autres utilisateurs.

Pour MariaDB, la situation est identique : les accès concurrents sont autorisés, il est donc parfaitement possible qu’une requête lise un ensemble de lignes alors qu’une autre requête en modifie certaines. Il est donc indispensable que chaque connexion MariaDB indique aux autres connexions quelles sont les ressources qui ne doivent pas être modifiées. Cette notification se fait en posant des verrous.

Il existe deux sortes de verrous : les verrous en lecture, qui autorisent d’autres connexions à lire les mêmes données mais pas à les modifier, et les verrous en écriture, qui interdisent à toutes les autres connexions de lire ou d’écrire.

La différence entre ces deux types de verrous est simple à comprendre si vous repensez à l’exemple du fichier que vous voulez ouvrir. Si vous souhaitez simplement lire ce fichier, d’autres utilisateurs peuvent également ouvrir le fichier pour le lire. Mais personne n’a le droit de le modifier, sinon vous risquez de lire des données incohérentes. Et si vous souhaitez mettre à jour le contenu du fichier, vous ne voulez pas que d’autres utilisateurs puissent lire ou écrire dans celui-ci pour éviter que le contenu ne devienne incohérent et donc inexploitable.

Toujours en reprenant cette analogie avec le fichier ouvert en lecture ou écriture, si vous imaginez que le fichier a plusieurs sections, il est possible que vous permettiez à un autre utilisateur de modifier des sections que vous n’êtes pas en train de lire. Dans ce cas, ce que vous lirez sera toujours cohérent puisque personne n’en modifiera le contenu, et vous ferez attendre moins longtemps (voire pas du tout) les utilisateurs qui veulent faire des modifications dans le fichier.

Avec MariaDB, le même principe existe : il est possible soit de verrouiller une table entière...