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.
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)
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 .
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
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.
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.
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.
SpaceToReclaim
. Est-ce en mégaoctets? pour cent? octets?94
par la taille de votreibdata1
fichier en Go etSpaceToReclaim
vous donnera la taille en Go.Ce fichier ne l'est
ibdata1
pasibdatal
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, consultez Comment réduire / purger le fichier ibdata1 dans MySQL .
la source
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.
la source