Die MySQL-Datendatei wird nicht verkleinert

8

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?

    
Midhat 15.04.2010, 14:52
quelle

4 Antworten

11

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.

    
Dan Soap 15.04.2010, 15:05
quelle
4

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):

  • Sichern Sie alle InnoDB -Tabellen in all -Datenbanken
  • Löschen Sie die Datei manuell
  • Reinitialisieren Sie InnoDB storage (indem Sie mysqld neu starten) und
  • Stellen Sie die Tabellen aus der Sicherung wieder her.

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.

    
Quassnoi 15.04.2010 15:02
quelle
1

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     

l0pan 12.05.2014 20:52
quelle

Tags und Links