Das ibdata1
nicht schrumpfen ist eine besonders ärgerliche Funktion von MySQL. Die ibdata1
Datei 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 ibdata1
wird 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.cnf
einzurichten, 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 ibdata1
Sie die Datei tatsächlich löschen:
- Führen Sie eine
mysqldump
der Datenbanken, Prozeduren, Trigger usw. mit Ausnahme der Datenbanken mysql
und ausperformance_schema
- Löschen Sie alle Datenbanken mit Ausnahme der beiden oben genannten Datenbanken
- Stoppen Sie MySQL
- Löschen
ibdata1
und ib_log
Dateien
- Starten Sie MySQL
- Vom Speicherauszug wiederherstellen
Wenn Sie MySQL in Schritt 5 starten, werden die ibdata1
und 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=innodb
oder 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_schema
ist 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_schema
verwendet 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 .