Das ibdata1
schrumpft nicht, ist eine besonders ärgerliche Eigenschaft von MySQL. Die ibdata1
Datei kann nicht tatsächlich verkleinert werden, es sei denn, Sie löschen alle Datenbanken, entfernen die Dateien und laden einen Dump neu.
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 Bill Karwins Kommentar ab Version 5.6.6 von MySQL ist dies standardmäßig aktiviert.
Es ist eine Weile her, dass ich das getan habe. Um Ihren Server jedoch so einzurichten, dass er separate Dateien für jede Tabelle verwendet, müssen Sie my.cnf
ändern um dies zu ermöglichen:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Da Sie den Speicherplatz von ibdata1
zurückfordern möchten Sie müssen die Datei tatsächlich löschen:
- Führen Sie einen
mysqldump
durch aller Datenbanken, Prozeduren, Trigger usw. außermysql
undperformance_schema
Datenbanken - Löschen Sie alle Datenbanken mit Ausnahme der beiden oben genannten Datenbanken
- Mysql stoppen
- Löschen Sie
ibdata1
undib_log
Dateien - Starten Sie mysql
- Aus Dump wiederherstellen
Wenn Sie MySQL in Schritt 5 starten, wird die Datei ibdata1
und ib_log
Dateien werden neu erstellt.
Jetzt bist du startklar. Wenn Sie eine neue Datenbank zur Analyse erstellen, befinden sich die Tabellen in separaten ibd*
Dateien, nicht in ibdata1
. Da Sie die Datenbank normalerweise bald danach löschen, wird die Datei ibd*
Dateien werden gelöscht.
http://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Sie haben wahrscheinlich Folgendes gesehen:
http://bugs.mysql.com /bug.php?id=1341
Mit dem Befehl ALTER TABLE <tablename> ENGINE=innodb
oder OPTIMIZE TABLE <tablename>
man kann Daten und Indexseiten aus ibdata1 in separate Dateien extrahieren. ibdata1 wird jedoch nicht verkleinert, es sei denn, Sie führen die obigen Schritte aus.
Bezüglich des information_schema
, das ist weder notwendig noch möglich zu löschen. Es handelt sich tatsächlich nur um eine Reihe von schreibgeschützten Ansichten, nicht um Tabellen. Und ihnen sind keine Dateien zugeordnet, nicht einmal ein Datenbankverzeichnis. Das informations_schema
verwendet die Speicher-DB-Engine und wird beim Beenden/Neustart von mysqld gelöscht und neu generiert. Siehe https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.