Meine ibdata1-Datei für MySQL-Datenbank wuchs im Laufe der Zeit auf etwa 32 GB. Kürzlich löschte ich ungefähr 10GB von Daten von meinen Datenbanken (und startete mysql für gutes Maß neu), aber die Datei schrumpft nicht. Gibt es eine Möglichkeit, die Größe dieser Datei zu reduzieren?
Die Dateigröße von InnoDB Tablespaces wird niemals automatisch reduziert, egal wie viele Daten Sie löschen.
Was Sie tun könnten, ist, obwohl es sehr mühsam ist, einen Tablespace für jede Tabelle zu erstellen, indem Sie
setzen %Vor% Der lange Teil davon ist, dass Sie ALLE DATEN vom mysql Server exportieren müssen (das Einrichten eines neuen Servers wäre einfacher) und dann die Daten erneut importieren. Statt einer einzelnen ibdata1-Datei, die die Daten für jede einzelne Tabelle enthält, finden Sie viele Dateien namens tablename.ibd
, die die Daten nur für eine einzige Tabelle enthalten.
Danach:
Wenn Sie dann viele Daten aus Tabellen löschen, können Sie mysql die Datei neu erstellen lassen, indem Sie
ausgeben %Vor%um zu MyIsam zu wechseln (und die InnoDB-Datendatei für diese Tabelle gelöscht zu haben) und dann
%Vor%um die Tabelle neu zu erstellen.
Wenn Sie nicht innodb_file_per_table
setzen, enthält ibdata1
alle InnoDB
-Tabellen plus Rückgängig.
Diese Datei wird nie verkleinert.
Um es zu verkleinern, sollten Sie (auf eigene Verantwortung):
InnoDB
-Tabellen in all -Datenbanken InnoDB
storage (indem Sie mysqld
neu starten) und Wenn Sie innodb_file_per_table
setzen, müssen Sie immer noch den Speicherplatz zurückfordern, aber in diesem Fall können Sie dies pro Tabelle tun, ohne die anderen Tabellen zu beeinflussen.
Beachten Sie, dass das Rückgängigmachen immer noch in ibdata
gespeichert wird, sogar mit innodb_file_per_table
set.
Führen Sie optimize table your_db.your_table;
sql-Anfrage aus
oder verwenden Sie den MySQL-Workbench-Migrationsassistenten und es wird eine Datenbankkopie mit reduzierter Größe
Tags und Links mysql