2009-07-29 20 views
1

Lorsque vous modifiez le contenu d'une table MySQL InnoDB les fichiers suivants sur le système de fichiers semble être impliqué/changé:Changements à une table MySQL InnoDB - quels sont les fichiers impliqués et pourquoi?

  • /path/to/mysql/data/[database]/[table].ibd (en raison de innodb_file_per_table)
  • /path/to/mysql/data/data/ib_logfile0
  • /path/to/mysql/data/data/ib_logfile1
  • /path/to/mysql/data/data/ibdata1

Pour chacun de ces fichiers:

  1. Quand le fichier est-il créé?
  2. Quand le fichier sera-t-il écrit?
  3. Quand le fichier sera-t-il lu?
  4. Quelle serait la conséquence si le fichier est corrompu ou supprimé?

Répondre

4
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table) 

C'est là que vous les données sont stockées. Ils sont créés lorsque vous créez les tables.

/path/to/mysql/data/data/ib_logfile0 
/path/to/mysql/data/data/ib_logfile1 

Ce sont logfiles.

Toutes les données sont écrites les changements dans la logfiles séquentielle, ce qui permet

/path/to/mysql/data/data/ibdata1 

écriture avant l'exploitation forestière (cruciale pour les transactions) C'est là les données du système et UNDO les données sont stockées.

Si ibdata ne se trouve pas, MySQL penseront que le moteur InnoDB est pas initialisé et il suffit de créer la nouvelle ibdata. Idem avec logfiles.

Si une requête est émise contre une table, et le fichier .ibd ne se trouve pas, MySQL échouera avec ce message:

Vous ne trouvez pas la table database/table du dictionnaire de données interne de InnoDB si le fichier .frm pour la la table existe. Peut-être avez-vous supprimé et recréé des fichiers de données InnoDB mais avez oublié de supprimer les fichiers .frm correspondants des tables InnoDB, ou avez-vous déplacé les fichiers .frm vers une autre base de données?

+0

Merci pour votre réponse! Connaissez-vous également la réponse à la dernière question (corruption/suppression)? Merci d'avance! – knorv