Docker LAMP - MySQL Dump (.sql.gz) importieren

Technik

Entweder stehe ich gerade auf der Leitung oder die meisten Methoden unter Windows funktionieren nicht, um in einen Docker-Compose MySQL Container einen Dump zu importieren. Nach vielen Versuchen hat nun endlich eine Methode geklappt, diese möchte ich mit euch teilen.

Für meinen Entwicklungsserver verwende ich docker-compose mit dem LAMP-Stack von sprintcube. Ich habe also drei verschiedene Container, den Webserver, den SQL-Server und den phpMyAdmin Container.

  • Der Import über den Webserver hat bei mir nicht funktioniert (keine Verbindung zum MySQL Container)
  • Die Docker Befehle, die ein < (kleiner Zeichen) benötigen, funktionieren in der PowerShell nicht
  • Und phpMyAdmin nimmt nur 2 MB große Dateien an

Am einfachsten hat sich für mich funktioniert, indem ich mich in den Docker MySQL-Container selbst mittels Bash einlogge. 

docker exec -it [MySQL Container] bash

Natürlich muss die Datei im Container verfügbar sein. Bei oben erwähnten lamp-stack bieten sich die Log-Ordner an, diese werden ohnehin schon importiert:

    volumes: 
      - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
      - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql

Einfach die SQL-Datei in einem der beiden Ordner importieren, den Import-Befehl ausführen und die Datei bei Bedarf wieder löschen. Alternativ könnt ihr auch einen eigenen Import Ordner machen und diesen als weiteres Volume hinzufügen. 

Im Container könnt ihr nun in den Logs Ordner wechseln und die normalen SQL Import Funktionen verwenden. In meinem Fall lautet dieses so:

cd /var/log/mysql
gunzip -c db.sql.gz | mysql --default-character-set=utf8 -uuser -ppassword db

Nach ein paar Sekunden (Minuten) ist im der Import fertig.

Permalink: https://to.ptmr.io/32F4kd5