Frage Was ist die Datei ibdata1 in meinem Verzeichnis / var / lib / mysql?


Ich habe mich in meinem Webmin-Kontrollfeld angemeldet und festgestellt, dass praktisch mein gesamter Speicherplatz voll ist. Ich suchte nach den zehn größten Dateien / Verzeichnissen auf meinem System und fand heraus, dass eine Datei namens ibdata1 etwa 94 GB Speicherplatz benötigt. Es befindet sich in meinem Verzeichnis / var / lib / mysql.

Was macht ibdata1? Kann ich es sicher entfernen? Meine Annahme ist, dass es eine Art Dump ist, aber das ist nur eine wilde Vermutung.


28
2018-03-12 20:26


Ursprung




Antworten:


Die Datei ibdata1 ist der System-Tablespace für die InnoDB-Infrastruktur.

Es enthält mehrere Klassen für Informationen, die für InnoDB wichtig sind

  • Tabellendatenseiten
  • Tabellenindexseiten
  • Datenwörterbuch
  • MVCC Steuerdaten
    • Rückgängig machen
    • Rollback-Segmente
  • Double Write Buffer (Im Hintergrund geschriebene Seiten, um das Betriebssystem-Caching zu vermeiden)
  • Insert Buffer (Änderungen zu Sekundärindizes)

Bitte beachte den Platz von ibdata1 im InnoDB-Universum (auf der rechten Seite)

InnoDB Architecture

Sie können Daten und Indexseiten von trennen ibdata1 durch Aktivieren innodb_file_per_table. Dies führt dazu, dass jede neu erstellte InnoDB-Tabelle Daten und Indexseiten in einem externen Speicher speichert .ibd Datei.

Beispiel

  • Datadir ist / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, erstellt /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table aktiviert, Daten / Indexseiten gespeichert in /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table deaktiviert, Daten / Indexseiten in ibdata1 gespeichert

Unabhängig davon, wo die InnoDB-Tabelle gespeichert ist, erfordert die Funktionalität von InnoDB die Suche nach Tabellenmetadaten sowie das Speichern und Abrufen MVCC Infos zur Unterstützung ACID-Konformität und Transaktionsisolation.

Hier sind meine früheren Artikel über die Trennung von Tabellendaten und Indizes von ibdata1

WAS MACHT MAN ALS NÄCHSTES

Sie können weiterhin ibdata1 alles gespeichert haben, aber das macht LVM Snapshots wirklich Plackerei (meine persönliche Meinung).

Sie müssen My StackOverflow-Post verwenden und diese Datei dauerhaft verkleinern.

Bitte führen Sie diese Abfrage aus:

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;

Dadurch wird angezeigt, wie viel ungenutzter Speicherplatz nach dem Anwenden der InnoDB-Bereinigung zurückgewonnen werden kann.


33
2018-03-13 18:07



Danke für deinen Beitrag. Mein Festplattenkontingent ist seither vollständig gefüllt - bevor ich auf einen der Ratschläge in Ihren Beiträgen eintrete, brauche ich freien Speicherplatz? Ich nehme zur Kenntnis, dass Ihr ursprünglicher Artikel auf SO von einem SQL-Dump berichtet, aber das würde vermutlich eine ~ 90GB-Datei erstellen, die nirgendwo hingehört. - James
mysqldump wird nur die logische Darstellung der Datenseiten, nicht die Indizes. Sie benötigen einen anderen Datenträger, möglicherweise einen Remote-Server, um die Daten zu sichern. - RolandoMySQLDBA
Es gibt 91.25350952148438 für mich als SpaceToReclaim. Ist das in Megabyte? Prozent? Bytes? - Isaac


Diese Datei ist ibdata1nicht ibdatal und es enthält alle deine InnoDB-Datenbanken. Wenn Sie es löschen, verlieren Sie alle Ihre Daten.

Für einige Ideen, wie man damit umgeht, siehe Wie man die Datei ibdata1 in MySQL verkleinert / löscht.


8
2018-03-12 20:29





Wenn Sie innodb als MySQL-Engine verwenden, wird standardmäßig gespeichert alles Ihre Datenbanken in ibdata1. Außerdem gibt es Protokolldateien ib_logfile0 und ib_logfile1. Löschen Sie diese Dateien nicht.


2
2018-03-13 00:05



Was ist diese Datei auf meinem Server löschen? - Frank