Dans quels fichiers MySQL enregistre les données ?
MySQL, comme tous les systèmes de gestion de base de données, est une sorte de boîte noire. On communique avec le système uniquement avec les requêtes SQL : certaines permettent d'enregistrer des données dedans (INSERT, UPDATE), et d'autres permettent de les lire (SELECT).
Ici nous allons voir comment MySQL enregistre les données physiquement sur le disque dur.
Premier point, il n'y a pas de généralité là dessus, en fait cela dépend du moteur de base de données que vous utilisez. Donc on ne va aborder que les 2 moteurs les plus utilisés : MyISAM et InnoDB.
MyISAM et les fichiers .MYD, .MYI
Commençons par MyISAM, le moteur de table par défaut.
MySQL stocke les tables MyISAM dans un dossier portant le nom de la base de données. Par exemple la table wp_options d'une base nommée pstutosera stockée dans 3 fichiers :
C:\EasyPHP\mysql\data\pstuto\wp_options.frm C:\EasyPHP\mysql\data\pstuto\wp_options.MYD C:\EasyPHP\mysql\data\pstuto\wp_options.MYI
Le fichier .frm contient la définition de la table, c'est-à-dire sa structure, aussi appelée schéma (en gros c'est la liste des colonnes, leur type...).
Le fichier .MYD contient les données de la table, les tuples (D comme Data).
Le fichier .MYI contient les indexes (qui servent à optimiser les performances en lecture)
Cette séparation entre les différentes bases et les différentes bases est très pratique, elle permet même de faire ce qu'on appelle des "hot backup" ou "hot restore", c'est-à-dire sauvegarder ou restaurer directement ces fichiers, plutôt que de passer un import/export SQL.
Après avoir lu afficher/masquer l'onglet développeur dans excel vous en saurez d'avantage sur ce sujet.
InnoDB et le fichier ibdata1
InnoDB a un fonctionnement totalement différent. C'est bien simple : InnoDB stocke tout dans un seul et même fichier : bases, tables, indexes... absolument tout !
Ce fichier s'appelle ibdata1, vous le trouverez au même endroit que les fichiers MyISAM :
C:\EasyPHP\mysql\data\ibdata1
Généralement ce fichier a une taille assez importante au regard de son contenu, car MySQL "réserve" l'espace disque. Cela permet d'éviter la fragmentation et d'améliorer les performances, au détriment de l'espace disque.
D'ailleurs cette technique d'allocation est aussi utilisée, par exemple, pour le fichier de swap (pagefile.sys) ou les fichiers de disque vmware.
Allez donc jeter un oeil sur cette page : stone island.