Skip to content

Lokale Docker-MySQL DB auf Basis der Test-DB


Hauptsächlich als Gedächtnisstütze für mich angelegt (daher linuxbasiert), aber evtl. auch mal in anderem Kontext hilfreich

Ausgangssituation

Man braucht eine zur Test-, Staging- oder Prod-DB 100% analoge DB (=> MySQL, nicht SQLite), in der aber völlig frei gewütet werden darf.

Lokale Docker Engine ist hilfreich, aber optional (geht genauso mit einer regulären MySQL Installation, aber planieren und neu aufstellen ist mit Docker sauberer/schneller möglich)

DBeaver kann angeblich dumpen und restoren, braucht aber in Wirklichkeit eine lokale MySQL Installation (konkret: das damit mitgelieferte mysqldump Tool) => DBeaver ist in meinen Augen dafür unbrauchbar, weil zu umständlich.

Alternative (Linux) mydumper/myloader. Ggf. Vorteil für die Zukunft: unterstützt Multithreading, sodass auch sehr große Datenbanken vergleichsweise schnell gedumpt und restored werden können. Installation in Linux aus Standardquellen: sudo aptitude install mydumper (myloader kommt automatisch mit).

Beispielaufruf

mydumper --host hermeneus-testing.c3se7lzcwjnw.eu-central-1.rds.amazonaws.com --user <User> -p '<Passwort>' -B hermeneus_production -t 8 --outputdir /home/bene/testdump

Benötigte knapp 4 Minuten, um die zu diesem Zeitpunkt 1,3GB große Datenbank zu dumpen. Könnte mit mehr Threads und ggf. anderem Schrauben an den Parametern evtl. noch beschleunigt werden.

Mydumper erstellt nicht ein riesiges SQL Script, sondern eines pro Tabelle - man kann daher jederzeit nur einzelne Tabellen laden, auch wenn man die gesamte Tabelle gedumpt hat.

WICHTIG: das Passwort muss im Aufruf oben mit einfachen Hochkommata versehen werden, sofern es Sonderzeichen (v.a. $) enthält!

Laden:

Wichtig - NB localhost/12.0.0.1 nicht bentzen, Docker nutzt 172.17.0.2!

myloader -d ~/testdump/ -h 172.17.0.2 -u root -a --ssl -p <Passwort> 3306 -s hermeneus_production

Mögliche weitere Einsatzszenarien

  • Regelmäßige Datenbankbackups (gibt es sicherlich schon, wäre ggf. eine Alternative, z.B. auf Basis von Skripten)
  • Insbesondere: regelmäßiger Abzug der Prod-DB auf einen Integrationstest- oder Stagingserver, für Abnahmetests oder allgemein Featuretests durch externe Tester. Steuerung z.B. durch Scripte.