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


32

Als ich mich bei meinem Webmin-Kontrollfeld anmeldete, bemerkte ich, dass praktisch mein gesamter Festplattenspeicher voll ist. Ich habe nach den zehn größten Dateien / Verzeichnissen auf meinem System gesucht und festgestellt, dass eine Datei mit dem Namen ibdata1 etwa 94 GB Speicherplatz belegt. Es befindet sich in meinem / var / lib / mysql-Verzeichnis.

Was macht ibdata1? Kann ich es sicher entfernen? Ich gehe davon aus, dass es sich um eine Müllkippe handelt, aber das ist nur eine wilde Vermutung.

Antworten:


38

Die Datei ibdata1ist der Systemtabellenbereich für die InnoDB-Infrastruktur.

Es enthält mehrere Informationsklassen, die für InnoDB von entscheidender Bedeutung sind

  • Tabellendatenseiten
  • Tabellenindex-Seiten
  • Datenwörterbuch
  • MVCC-Steuerdaten
    • Leerzeichen rückgängig machen
    • Rollback-Segmente
  • Doppelter Schreibpuffer (Seiten, die im Hintergrund geschrieben wurden, um das Zwischenspeichern des Betriebssystems zu vermeiden)
  • Puffer einfügen (Änderungen an Sekundärindizes)

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

InnoDB-Architektur

Sie können Daten- und Indexseiten voneinander trennen, ibdata1indem Sie innodb_file_per_table aktivieren . Dadurch speichert jede neu erstellte InnoDB-Tabelle Daten und Indexseiten in einer externen .ibdDatei.

Beispiel

  • Datadir ist / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;schafft /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, muss die InnoDB-Funktionalität nach Tabellenmetadaten suchen und MVCC- Informationen speichern und abrufen , um die ACID-Konformität und die Transaktionsisolation zu unterstützen .

Hier sind meine früheren Artikel zum Trennen von Tabellendaten und Indizes von ibdata1

WAS MACHT MAN ALS NÄCHSTES

Sie können ibdata1 weiterhin alles speichern lassen, aber das macht LVM-Snapshots zu einer echten 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;

Dies zeigt an, wie viel verschwendeter Speicherplatz nach der Anwendung von InnoDB Cleanup zurückgewonnen werden kann.


Danke für deinen Beitrag. Mein Festplattenkontingent ist inzwischen vollständig gefüllt. Brauche ich freien Speicherplatz, bevor ich auf einen der Ratschläge in Ihren Posts eingehen kann? Ich stelle fest, dass Ihr ursprünglicher Beitrag auf SO erwähnt, dass ein SQL-Dump durchgeführt werden soll, aber dies würde vermutlich eine ~ 90-GB-Datei erzeugen, die nirgendwo hingehen kann.
James

mysqldump dient nur der logischen Darstellung der Datenseiten, nicht der Indizes. Sie benötigen einen anderen Festplatten-Mount, möglicherweise einen Remote-Server, um die Daten zu sichern.
RolandoMySQLDBA

9
Es gibt 91.25350952148438 für mich als zurück SpaceToReclaim. Ist das in Megabyte? Prozent? Bytes?
Isaac

Ich weiß, das ist zu alt. Wenn Sie mit dem Problem hierher kommen, müssen Sie die Zahl durch eine Zahl ersetzen, die 94der Größe Ihrer ibdata1Datei in GB entspricht. In diesem Fall SpaceToReclaimwird die Größe in GB angegeben.
Anupsabraham


2

Wenn Sie innodb als MySQL-Engine verwenden, werden standardmäßig alle Ihre Datenbanken in ibdata1 gespeichert. Es gibt auch Protokolldateien ib_logfile0 und ib_logfile1. Löschen Sie diese Dateien nicht.


Was ist diese Datei auf meinem Server löschen?
Frank
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.