web-dev-qa-db-fra.com

Qu'est-ce que le fichier ibdata1 dans mon répertoire / var / lib / mysql?

En me connectant à mon panneau de configuration Webmin, j'ai remarqué que pratiquement tout mon espace disque était plein. J'ai recherché les dix plus gros fichiers/répertoires de mon système et j'ai découvert qu'un fichier appelé ibdata1 occupe environ 94 Go d'espace. Il réside dans mon répertoire/var/lib/mysql.

Que fait ibdata1? Suis-je sûr de le retirer? Mon hypothèse est que c'est un dépotoir d'une certaine sorte, mais c'est juste une supposition sauvage.

34
James

Le fichier ibdata1 Est l'espace disque logique système pour l'infrastructure InnoDB.

Il contient plusieurs classes d'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
    • Annuler l'espace
    • Segments de restauration
  • Double tampon d'écriture (pages écrites en arrière-plan pour éviter la mise en cache du système d'exploitation)
  • Insérer un tampon (modifications apportées aux index secondaires)

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

InnoDB Architecture

Vous pouvez séparer les pages de données et d'index de ibdata1 En activant innodb_file_per_table . Cela entraînera toute nouvelle table InnoDB à stocker des données et des pages 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 de métadonnées de table et le stockage et la récupération [~ # ~] mvcc [~ # ~] informations à prendre en charge Conformité ACID et Isolement 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 à avoir tout stocké dans ibdata1, mais cela fait de la réalisation d'instantanés LVM une véritable corvée (mon opinion personnelle).

Vous devez utiliser la publication My 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) SpaceToReclaim
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.

39
RolandoMySQLDBA

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 le gérer, voir Comment réduire/purger le fichier ibdata1 dans MySQL .

8
Michael Hampton

Si vous utilisez innodb comme moteur MySQL par défaut stockera tous vos bases de données dans ibdata1. Il existe également des fichiers journaux ib_logfile0 et ib_logfile1. Ne supprimez pas ces fichiers.

2
silviud