Oft benötige ich für meine lokale Entwicklungsumgebung die aktuelle Struktur und die Inhalte der Datenbank des Produktivsystems. Ein möglicher Ablauf, um die Daten aus dem Produktiv-Datenbankserver herauszuholen und lokal zu importieren könnte so aussehen:
- Einloggen auf dem Server
- per mysqldump eine Datei mit allen SQL-Statements zum Erzeugen der Datenbank samt ihrer Daten schreiben
- Den Dump mit gzip oder bzip2 komprimieren
- Diese Datei mit scp oder rsync auf den lokalen Rechner herunterladen und in die Entwicklungs-Virtual-Machine kopieren
- Einloggen auf der Entwicklungs-VM
- Entpacken sowie Importieren des Dumps
Oder man macht es einfach als Einzeiler auf der Shell:
ssh server "mysqldump db_name | gzip -c" | ssh vagrant "gzip -dc | mysql db_name"
Wahlweise kann man auch noch pv als Fortschrittsanzeige dazwischenschalten:
ssh server "mysqldump db_name | gzip -c" | pv | ssh vagrant "gzip -dc | mysql db_name"
Mit Hilfe des Pipes-Konzepts lässt sich der Ausgabestream eines Kommandos als Eingabestream eines anderen Kommandos verwenden, ohne dass temporäre Dateien angelegt und herumkopiert werden müssen. Es dürfte sich neben der “Everything is a file”-Philosophie[1] um eines der praktischsten Dinge von Unix sein.