48 votes

Quel est le fichier ibdata1 dans mon répertoire /var/lib/mysql?

En me connectant à mon panneau de contrôle Webmin, j'ai remarqué que pratiquement tout mon espace disque est plein. J'ai recherché les dix plus gros fichiers/répertoires sur mon système et j'ai constaté qu'un fichier appelé ibdata1 occupait environ 94 Go d'espace. Il se trouve dans mon répertoire /var/lib/mysql.

Que fait ibdata1? Est-il sûr de le supprimer? Je suppose qu'il s'agit d'une sauvegarde de quelque chose, mais ce n'est qu'une supposition.

49voto

Adam Points 11

Le fichier ibdata1 est l'espace de table système pour l'infrastructure InnoDB.

Il contient plusieurs classes pour des informations vitales pour InnoDB

  • Pages de données de table
  • Pages d'index de table
  • Dictionnaire de données
  • Données de contrôle MVCC
    • Espace d'annulation
    • Segments de retour arrière
  • Tampon d'écriture double (pages écrites en arrière-plan pour éviter le cache OS)
  • Tampon d'insertion (changements apportés aux index secondaires)

Veuillez noter la place d'ibdata1 dans l'Univers InnoDB (sur le côté droit)

Architecture InnoDB

Vous pouvez séparer les pages de données et d'index de ibdata1 en activant innodb_file_per_table. Cela fera en sorte que toute table InnoDB nouvellement créée stocke les pages de données et d'index dans un fichier externe .ibd.

Exemple

  • datadir est /var/lib/mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, crée /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table activé, Pages de données/Index stockées dans /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table désactivé, Pages de données/Index stockées dans ibdata1

Peu importe où la table InnoDB est stockée, la fonctionnalité d'InnoDB nécessite la recherche des métadonnées de table et le stockage et la récupération des informations MVCC pour prendre en charge la conformité ACID et l'Isolation de Transaction.

Voici mes articles précédents sur la séparation des données de table et des index d'ibdata1

QUE FAIRE ENSUITE

Vous pouvez continuer à stocker ibdata1 de tout, mais cela rend les instantanés LVM vraiment fastidieux (mon avis personnel).

Vous devez utiliser mon post StackOverflow et réduire ce fichier de manière permanente.

Veuillez exécuter cette requête :

SELECT 
    ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) EspaceÀRécupérer
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;

Cela indiquera combien d'espace gaspillé peut être récupéré après l'application du nettoyage InnoDB.

10voto

Michael Hampton Points 232226

Ce fichier est ibdata1, pas ibdatal et il contient toutes vos bases de données InnoDB. Si vous le supprimez, vous perdez toutes vos données.

Pour quelques idées sur la façon de gérer cela, consultez Comment réduire/purger le fichier ibdata1 dans MySQL.

3voto

silviud Points 2667

Si vous utilisez innodb comme moteur MySQL par défaut, tous vos bases de données seront stockées dans ibdata1. Il y a aussi des fichiers journaux ib_logfile0 et ib_logfile1. Ne supprimez pas ces fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X