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

32

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 constaté 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.

James
la source

Réponses:

38

Le fichier ibdata1est l'espace disque logique système de 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)

Architecture InnoDB

Vous pouvez séparer les pages de données et d'index ibdata1en activant innodb_file_per_table . Cela entraînera toute table InnoDB nouvellement créée à stocker des données et des pages d'index dans un .ibdfichier externe .

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 des informations MVCC pour prendre en charge la conformité ACID et l' isolement des transactions .

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.

RolandoMySQLDBA
la source
Merci pour votre contribution. Depuis, mon quota de disque est complètement rempli - avant de suivre les conseils de vos messages, aurai-je besoin d'espace libre? Je note que votre message d'origine sur SO mentionne la possibilité de faire un vidage SQL, mais cela créerait vraisemblablement un fichier de ~ 90 Go avec nulle part où aller.
James
mysqldump ne fera que la représentation logique des pages de données, pas les index. Vous aurez besoin d'un autre montage de disque, peut-être un serveur distant, pour vider les données.
RolandoMySQLDBA
9
Il renvoie 91.25350952148438 pour moi en tant que SpaceToReclaim. Est-ce en mégaoctets? pour cent? octets?
Isaac
Je sais que c'est trop vieux. Mais pour tous ceux qui viennent ici avec le problème, vous devez remplacer le nombre 94par la taille de votre ibdata1fichier en Go et SpaceToReclaimvous donnera la taille en Go.
anupsabraham
8

Ce fichier ne l'est ibdata1pas ibdatalet 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, consultez Comment réduire / purger le fichier ibdata1 dans MySQL .

Michael Hampton
la source
2

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

silviud
la source
Qu'est-ce que supprimer ce fichier sur mon serveur?
Frank