InnoDB

InnoDB est un moteur de stockage pour les systèmes de gestion de base de données MySQL et MariaDB. Il est inclus et activé dans toutes les distributions fournies par MySQL AB depuis la version 4[1] et devient le moteur par défaut à partir de MySQL 5.5.5[2]. Son principal avantage par rapport aux autres moteurs de stockage de MySQL est qu'il permet des transactions ACID (atomiques, cohérentes, isolées et durables), ainsi que la gestion des clés étrangères (avec vérification de la cohérence). Autrement dit, InnoDB est un moteur de bases de données relationnelles et transactionnelles, à l'image de celui utilisé par son concurrent Open Source PostgreSQL.

En matière de gestion de verrous, InnoDB permet de lire les données alors que les tables sont verrouillées à l'occasion de mises à jours (UPDATE) ou de suppression (DELETE) de données au travers de transactions (BEGIN, START TRANSACTION, COMMIT, ROLLBACK). En revanche, il n'y a aucune possibilité de réaliser des mises à jour et des suppressions concurrentes sur une même table. InnoDB ne propose pas de verrous sur lignes. Les seuls verrous qu'il sait poser sont des verrous exclusifs sur table[3].

InnoDB est devenu un produit d'Oracle Corporation, qui a acquis Innobase Oy (en) en [4]. Le logiciel est sous double licence : il est distribué sous la GNU General Public License, mais des licences commerciales sont vendues pour des développements qui intégreraient InnoDB à des logiciels propriétaires (ce que la GPL ne permet pas)[5].

Toutes les bases de données sont stockées au même endroit. Par défaut dans le fichier ibdata1 qui, sous les systèmes de type Unix, se trouve généralement dans le dossier /var/lib/mysql/ . Il est également possible d'utiliser plusieurs fichiers ou même d'utiliser directement une ou plusieurs partitions sur le disque en mode RAW.

Ce moteur de base de données utilise aussi deux fichiers de logs, d'habitude ib_logfile0 et ib_logfile1. Les fichiers de définitions de table .frm sont également dans un dossier au nom de la base comme pour MyISAM.

Les fichiers données de InnoDB ne peuvent pas être sauvegardés par copie de fichiers : il en résulterait une corruption de données. La seule façon de faire une copie consistante des fichiers à chaud est d'utiliser Percona XtrabBackup[6] pour MySQL et Mariabackup[7] pour MariaDB. L'autre manière de faire une sauvegarde consistante est d'utiliser la commande mysqldump[8] en mode " single transaction"[9]. Vous pouvez utiliser le mécanisme dit des binlog[10] pour récupérer les transactions effectuées entre deux sauvegardes, afin de les rejouer après avoir restauré les données d'une sauvegarde logique ou dump. Remarquez que les fichiers de logs et les .frm sont importants et ne doivent pas être ignorés.

Depuis la version 5.6, une extension memcached au moteur InnoDB permet un accès aux données via une interface du type NoSQL permettant d'améliorer les performances. Non seulement les données sont accessibles en lecture et écriture avec les requêtes SQL classiques, mais il est possible d'y accéder de façon plus simple à l'aide d'une syntaxe du style « @@get key » évitant l'interprétation d'une requête par le parseur[11].

Références

[modifier | modifier le code]
  1. « InnoDB avec MySQL version 3.23 », Oracle (consulté le )
  2. (en) « Setting the Storage Engine », Oracle (consulté le )
  3. (en) « MySQL :  : MySQL 8.0 Reference Manual :  : 15.7.1 InnoDB Locking », sur mysql.com (consulté le ).
  4. (en) « Oracle Announces the Acquisition of Open Source Software Company, Innobase », Oracle (consulté le )
  5. (en) « Licensing MySQL and InnoDB », InnoDB.com (consulté le )
  6. https://www.percona.com/downloads/XtraBackup/LATEST/
  7. https://mariadb.com/kb/en/library/full-backup-and-restore-with-mariabackup/
  8. (en) « A Database Backup Program », sur mysql.com (consulté le ).
  9. (en) « A Database Backup Program », sur mysql.com (consulté le ).
  10. « Binary Log », sur MariaDB KnowledgeBase (consulté le )
  11. Oracle NoSQL to InnoDB with Memcached