Modifications apportées à une table MySQL InnoDB - Quels fichiers sont impliqués et pourquoi?
-
05-07-2019 - |
Question
Lors de la modification du contenu d'un tableau InnoDB MySQL, les fichiers suivants du système de fichiers semblent être impliqués / modifiés:
-
/ chemin / vers / mysql / data / [base de données] / [table] .ibd
(en raison deinnodb_file_per_table
) -
/ chemin / vers / mysql / data / data / ib_logfile0
-
/ chemin / vers / mysql / data / data / ib_logfile1
-
/ chemin / vers / mysql / data / data / ibdata1
Pour chacun de ces fichiers:
- Quand le fichier est-il créé?
- Quand le fichier sera-t-il écrit?
- Quand le fichier sera-t-il lu?
- Quelle serait la conséquence si le fichier est corrompu ou supprimé?
La solution
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)
C'est ici que vos données sont stockées. Ils sont créés lors de la création des tables.
/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1
Il s’agit de fichiers journaux
.
Toutes les modifications de données sont écrites séquentiellement dans les fichiers de journalisation
, ce qui permet la journalisation à écriture anticipée (crucial pour les transactions)
/path/to/mysql/data/data/ibdata1
C’est ici que sont stockées les données système et les données UNDO
.
Si ibdata ??code> n'est pas trouvé,
MySQL
pensera que le moteur InnoDB
n'est pas initialisé et crée simplement le nouveau ibdata
. Identique avec fichiers journaux
.
Si une requête est émise sur une table et si le fichier .ibd
est introuvable, MySQL
échouera avec le message suivant:
Impossible de trouver la table
base de données / table
dans le dictionnaire de données interne deInnoDB
, bien que le fichier.frm
de la table existe. Vous avez peut-être supprimé et recréé des fichiers de donnéesInnoDB
mais vous avez oublié de supprimer les fichiers.frm
des tablesInnoDB
correspondants, ou vous avez déplacé des fichiers.frm
vers une autre base de données?