Neulich musste ich in einem Projekt einen knapp 40 MB großen MySQL-Dump in eine vorhandene Datenbank auf einem Shared-Host importieren. Im vom Hoster bereitgestellten phpMyAdmin war die maximale Upload-Dateigröße jedoch auf 20 MB begrenzt. Und das Importieren des gezippten Dumps (der nur noch zirka 3 MB groß war) scheiterte am Überschreiten des PHP-Memory-Limits. Einen SSH-Zugang gab es nicht und ein Import Tabelle für Tabelle brachte auch nichts, da 39 der 40 MB in einer einzigen Tabelle steckten. Was also tun?
Nun hätte ich natürlich den SQL-Dump der besagten Tabelle händisch aufdröseln und häppchenweise importieren können – aber das wollte ich selbstverständlich vermeiden. Nichts geht über einen Abend mit SQL-Queries aber hey – ich habe auch noch andere Hobbys.
Genau diesen Ansatz verfolgt aber das kleine PHP-Skript BigDump von Alexey Ozerov, allerdings vollautomatisch. Dazu überträgt man zunächst die kritische SQL-Datei in einen neuen Unterordner seiner Website. Anschließend editiert man die bigdump.php, gibt dort die Datenbankverbindung und das Encoding des SQL-Dumps an und überträgt diese PHP-Datei ebenfalls in das neue Verzeichnis, dorthin wo bereits der SQL-Dump liegt. Danach ruft man BigDump über einen Browser auf. Die Oberfläche listet dann alle gefundenen *.sql- und *.gz-Dateien im eigenen Ordner auf – dort wählt man die gewünschte Datei für den Import aus und startet den Prozess. Um das Ausschöpfen des Speicherlimits beim Entpacken eines gezippten Dumps zu verhindern, habe ich hier die unkomprimierte, 40MB-SQL-Datei ausgewählt.
BigDump importiert dann zunächst nur einen kleinen Schnipsel der SQL-Datei, ruft sich dann selber erneut auf, importiert den nächsten Schnipsel, ruft sich dann wiederum selber erneut auf, importiert den nächsten Schnipsel … ihr versteht schon. Somit verhindert BigDump effektiv das Erreichen von Laufzeit- und Speichergrenzen. Und das Upload-Limit wird ja durch das vorherige Hochladen des Dumps via FTP umgangen.
Keine extended inserts
Damit BigDump den SQL-Dump in kleine Häppchen aufteilen kann, darf der Dump nicht mit „extended inserts“ erstellt werden. Bei extend inserts werden nämlich alle Tabellen in einer einzigen Query zusammengefasst und lassen sich somit nicht aufteilen. Wenn Ihr phpMyAdmin zum Export (!) der Datenbank-Inhalte verwendet, achtet daher darauf, dass die im nachfolgenden Screenshot gezeigte Option „keine der beiden obigen Option verwenden“ ausgewählt ist.
Der Import meines „Problem“-SQL-Dumps dauerte auf diesem Weg nur wenige Augenblicke und hat mir eine Menge lästiger Fummelei erspart. BigDump ist also ganz klar eine Empfehlung wenn es um den Import großer SQL-Dumps auf stark limitierten Servern geht.
[Update: 02.09.2015]
Jan Rademacher wies mich in den Kommentaren darauf hin, auch das Tool MySQLDumper zu erwähnen – was ich hiermit gern nachtrage. MySQLDumper habe ich jedoch nicht getestet und kann mich dazu dementsprechend nicht qualifiziert äußern.
An dieser Stelle sollte der mysqldumper natürlich erwähnt werden…:
http://www.mysqldumper.net
Hallo Jan,
danke für den Hinweis – habe ich im Artikel ergänzt.