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
mysqldumpdurch aller Datenbanken, Prozeduren, Trigger usw. außermysqlundperformance_schemaDatenbanken - Löschen Sie alle Datenbanken mit Ausnahme der beiden oben genannten Datenbanken
- Mysql stoppen
- Löschen Sie
ibdata1undib_logDateien - 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.
https://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Sie haben wahrscheinlich Folgendes gesehen:
https://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
.