Möchte man große MySQL-Datenbanken importieren oder exportieren, so stößt man mit phpMyAdmin schnell an dessen Grenzen. Überlicherweise bereitet der Datenimport mehr Probleme als der Export. Wie man diese Probleme jedoch lösen kann, erfährst du hier.
Inhaltsverzeichnis
Das Problem mit großen Datenbanken
Als Test sollte beispielsweise eine 193 MB große *.sql-Datei, die in komprimierter Form 19 MB groß ist, mittels phpMyAdmin in die Datenbank importiert werden. Als Fehlermeldung erhält man schließlich
Und in der Tat steht neben dem Auswahlmenü, mit dem die zu importierende Datei ausgewählt wird, dass die Datei maximal 2.048 KiB groß sein darf.
Vier Möglichkeiten zum Import und Export großer Datenbanken
Zur Lösung des Problems werden nachfolgend vier Möglichkeiten dargestellt. Die erste Variante erfolgt durch Änderung der Konfiguration des Webservers und der Einstellungen von phpMyAdmin. Zu empfehlen ist jedoch stets die letzte Variante via Konsole, da diese am zuverlässigsten funktioniert und auch performancetechnisch allen anderen Varianten überlegen ist.
1. Möglichkeit: phpMyAdmin
Um den Import und Export via phpMyAdmin zu bewerkstelligen, ist eine Änderung der Datei php.ini (bei XAMPP: INSTALLATIONSPFAD/xampp/php/php.ini) erforderlich. Das Problem ist hierbei, dass nicht alle Webhoster dem Kunden diese Datei zur Verfügung stellen. Sofern man darauf Zugriff hat, müssen drei Werte geändert werden. Die maximale Ausführungszeit wird von 30 Sekunden auf 2000 Sekunden hochgesetzt:
max_execution_time=2000
Die maximale Dateigröße wird von 2 MB auf 200 MB geändert:
upload_max_filesize=200M
Und die maximale POST-Größe wird von 8 MB auf 200 MB festgelegt:
post_max_size=200M
Des Weiteren muss der Wert der Variable $cfg['ExecTimeLimit'] in der Datei config.default.php von phpMyAdmin (in XAMPP: INSTALLATIONSPFAD\xampp\phpMyAdmin\libraries\config.default.php) von 300 Sekunden auf 2000 Sekunden abgeändert werden:
$cfg['ExecTimeLimit'] = 2000;
Nun muss die Datei gespeichert und der Webserver neu gestartet werden. Bei XAMPP öffnen wir hierfür das XAMPP Control Panel (INSTALLATIONSPFAD/xampp/xampp-control.exe) und beenden den Apache-Server. Anschließend muss dieser wieder gestartet werden.
Ein erneuter Versuch, die Datei mittels phpMyAdmin zu importieren, führte schließlich nach stolzen 27 Minuten zum gewünschten Erfolg.
2. Möglichkeit: BigDump
BigDump ist ein kleines Skript, das im Prinzip wie folgt funktioniert: es verarbeitet einen kleinen Teil der *.sql-Datei, ruft sich dann selbst erneut auf und verarbeitet dann den nächsten Teil usw. Hierdurch wird das Problem mit evtl. zu kurzen Skriptlaufzeiten unterbunden.
Zunächst muss das Skript hier heruntergeladen und anschließend entpackt werden. Dann öffnet man die Datei bigdump.php und passt die Datenbank-Konfiguration entsprechend an.
Danach lädt man es in den htdocs-Ordner des Webservers bzw. der lokalen Installation. In den gleichen Pfad wie die *.php-Datei lädt man außerdem noch die zu importierende *.sql-Datei. Hierbei ist darauf zu achten, dass die exportierte Datei nicht mit extended inserts erstellt worden ist. Das heißt, wenn der Export durch phpMyAdmin erfolgt, dann muss die Option "keine der beiden obigen Optionen verwenden" ausgewählt werden (siehe Abbildung). Das hat natürlich zur Folge, dass die *.sql-Datei deutlich größer wird.
Jetzt ruft man das Skript im Browser auf, also z.B. durch http://localhost/bigdump/bigdump.php im Falle einer lokalen Installation und je nachdem, in welchem Pfad die Datei liegt. Nun muss man nurnoch auf Start Import klicken und schon beginnt der Import. Alternativ könnte man auch noch eine *.sql-Datei auswählen und in den Pfad laden, aber dies haben wir ja im vorherigen Schritt schon erledigt.
3. Möglichkeit: MySQLDumper
MySQLDumper funktioniert im Prinzip wie BigDump, ist jedoch deutlich umfangreicher und kann auch zum Export verwendet werden. Herunterladen kann man MySQLDumper hier. Leider wird MySQLDumper nicht mehr offiziell weiterentwickelt. Die auf der offiziellen Webseite des Entwicklers angebotene Version läuft somit leider nicht unter PHP 7. Der hier genannte Link führt jedoch zu einer überarbeiteten Version, die unter PHP 7 lauffähig sein sollte.
Nach dem Entpacken lädt man es ebenfalls in den htdocs-Ordner. Damit diese Version funktioniert, muss jedoch noch die Datei config.default.php in config.php umbenannt werden. Alle relevanten Einstellungen können praktischerweise in der Weboberfläche vorgenommen werden. Die zu importierende *.sql-Datei lädt man in das Unterverzeichnis /MySQLDumper/work/backup/.
Nun ruft man MySQLDumper im Browser auf, also im Falle einer lokalen Installation und je nach Pfad durch Eingabe von http://localhost/MySQLDumper/. Nun muss man die gewünschte Sprache auswählen und auf Installation klicken. Danach trägt man die Datenbank-Parameter in die Felder ein und klickt auf zu MySQL verbinden. Anschließend geht man auf speichern und Installation fortsetzen. Nun wählt man die Datenbank aus und klickt zum Importieren auf Widerherstellung und wählt dort die Datei aus. Ein Klick auf Wiederherstellen beginnt schließlich den Datenimport.
4. Möglichkeit: Konsole / Shell / SSH
Der schnellste und zuverlässigste Weg zum Importieren und Exportieren von Datenbanken erfolgt über die Konsole. Wenn es sich um einen Webserver handelt, benötigen wir hierfür jedoch SSH-Zugang, welchen nicht alle Webhoster bereitstellen. Wenn es sich um eine lokale XAMPP-Installation handelt, dann gehen wir hierfür in den Pfad INSTALLATIONSPFAD/xampp/mysql/bin/ und halten dort die Shift-Taste gedrückt und klicken währenddessen mit der rechten Maustaste auf einen freien Platz. Dann wählen wir Eingabeaufforderung hier öffnen aus.
Datenimport
Für einen Datenimport müssen wir dann nur noch folgendes eingeben:
mysql -u USERNAME -p DATENBANKNAME < File.sql
Datenexport
Das Kommando zum Exportieren lautet wie folgt:
mysqldump -u USERNAME -p DATENBANKNAME TABELLENNAME > File.sql
Fazit
Wir haben gerade vier Möglichkeiten kennengelernt, um MySQL-Datenbanken zu importieren oder zu exportieren. Je nachdem, welchen Webhoster man verwendet, funktionieren unter Umständen nicht alle Möglichkeiten, jedoch sollte mindestens eine davon zum Erfolg führen.