mySQL: InnoDB, riesige ibdata1 verkleinern

Testweise musste ich kürzlich an meinem Linux-Server (auf dem auch dieses Blog läuft), eine sehr große Datenmenge in eine mySQL-Datenbank importieren. Importiert wurden ca. 37 Mio. Datensätze. Das Ergebnis war eine ca. 1,2 GB große Datei /var/lib/mysql/ibdata1

Nachdem ich die Datenbank nicht mehr benötigte habe ich sie wieder gelöscht. Zuerst die Tabellen und dann die ganze Datenbank. Nun dachte ich mir, der Speicherplatz würde wieder freigegeben werden. Leider Fehlanzeige! Die ibdata1 war nach wie vor 1,2 GB groß.

Nach viel Recherche im Internet fand ich leider keine Lösung, die mich total überzeugte.

Das einzige brauchbare was ich fand war das hier, was dann auch zum Erfolg führte:

  1. Datenbank sichern mit dem Befehl  mysqldump –all-databases -p > dbsicherung.sql
  2. Die Datei /etc/mysql/my.cnf um den Eintrag „innodb_file_per_table“ im Abschnitt [mysqld] ergänzt, damit pro Tabelle eine Datei angelegt wird, die dann auch beim löschen der Tabelle gelöscht wird.
  3. MySQL mit dem Befehl /etc/init.d/mysql stop  beenden
  4. Sicherheitshalber das Datenverzeichnis sichern mit den Befehlen:
    1.   mv /var/lib/mysql/ibdata1 /root/ibdata-backup/
    2.   mv /var/lib/mysql/lib_logfile* /root/ibdata-backup/
  5. MySQL wieder starten mit  /etc/init.d/mysql start
  6. Die Daten wieder importieren mit dem Befehl  mysql -u root -p < dbsicherung.sql

Die Datei dbsicherung.sql und die gesicherten Daten in /root/ibdata-backup/ habe ich sicherheitshalber noch einige Tage aufgehoben und nachdem dann alles reibungslos funktionierte wieder gelöscht.

Nach dieser Aktion belegte mySQL nur noch ca. 80 MB auf meiner Platte, was dann eine deutliche Verbesserung darstellte.

Wie immer bei solchen Tipps: das nachmachen erfolgt auf eigenes Risiko – ich kann keinen Support und keine Haftung übernehmen!

 

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.