Das ibdata1nicht schrumpfen ist eine besonders ärgerliche Funktion von MySQL. Die ibdata1Datei kann nur verkleinert werden, wenn Sie alle Datenbanken löschen, die Dateien entfernen und einen Speicherauszug neu laden.
Sie können MySQL jedoch so konfigurieren, dass jede Tabelle einschließlich ihrer Indizes als separate Datei gespeichert wird. Auf diese Weise ibdata1wird nicht so groß. Laut dem Kommentar von Bill Karwin ist dies ab Version 5.6.6 von MySQL standardmäßig aktiviert.
Es ist eine Weile her, dass ich das getan habe. Um Ihren Server so my.cnfeinzurichten, dass für jede Tabelle separate Dateien verwendet werden, müssen Sie Folgendes ändern , um Folgendes zu aktivieren:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
Wenn Sie den Speicherplatz zurückfordern möchten, müssen ibdata1Sie die Datei tatsächlich löschen:
- Führen Sie eine
mysqldumpder Datenbanken, Prozeduren, Trigger usw. mit Ausnahme der Datenbanken mysqlund ausperformance_schema
- Löschen Sie alle Datenbanken mit Ausnahme der beiden oben genannten Datenbanken
- Stoppen Sie MySQL
- Löschen
ibdata1und ib_logDateien
- Starten Sie MySQL
- Vom Speicherauszug wiederherstellen
Wenn Sie MySQL in Schritt 5 starten, werden die ibdata1und ib_log-Dateien neu erstellt.
Jetzt können Sie loslegen. Wenn Sie eine neue Datenbank für die Analyse erstellen, befinden sich die Tabellen in separaten ibd*Dateien, nicht in ibdata1. Da Sie die Datenbank normalerweise bald danach ibd*löschen , werden die Dateien gelöscht.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Sie haben dies wahrscheinlich gesehen:
http://bugs.mysql.com/bug.php?id=1341
Mit dem Befehl ALTER TABLE <tablename> ENGINE=innodboder OPTIMIZE TABLE <tablename>kann man Daten und Indexseiten aus ibdata1 extrahieren, um Dateien zu trennen. Ibdata1 wird jedoch nur verkleinert, wenn Sie die obigen Schritte ausführen.
In Bezug auf die information_schemaist das weder notwendig noch möglich zu fallen. Es ist in der Tat nur eine Reihe von schreibgeschützten Ansichten, keine Tabellen. Und ihnen sind keine Dateien zugeordnet, nicht einmal ein Datenbankverzeichnis. Das informations_schemaverwendet die Speicher-DB-Engine und wird beim Stoppen / Neustarten von mysqld gelöscht und neu generiert. Siehe https://dev.mysql.com/doc/refman/5.7/en/information-schema.html .