Mysql Datenbank direkt auf lokalem Rechner speichern

Mysql Datenbanken lassen sich mittels mysqldump einfach in einem SQL-File speichern. Bei großen Datenbanken kann es sein, dass der Platz nicht mehr auf dem Rechner ausreicht, auf dem man mysqldump ausführt. Es kommt einerseits zu großen temporären Datein, zum andern kann es sein, dass einfach der Speicher auf dem Ziel des Speichervorgangs nicht ausreicht. Dann kommt es zur Fehlermeldung:

mysqldump: Got errno 28 on write 
Database dump failed 

Ziel bestimmen

Der Befehl für mysqldump ist relativ einfach:

mysqldump -u USER -p DATENBANK > SPEICHERORT/dump.sql

Am besten ist es den Speicherort auf eine andere Festplatte zu legen, damit die Eingabe udn Ausgabe auf zwei verschiedenen Platten ausgeführ wird und dies Schreib- und Lesevorgänge beschleunigt.

Kompression

Die Ausgabe kann gezippt werden. Das mindert den Schreibaufwand.

mysqldump -u USER -p DATENBANK | gzip -9 > SPEICHERORT/dump.sql

Temporärer Ordner

In der Server-Anweisung für den Mysql-Server steht der Ort, an welchem die temporäre Datei gespeichert wird. Auch dieser Ort kann auf einem zu kleinen Speicher liegen. Dann muss man ihn verschieben. Dies geschieht in der Datei für die Serverkonfiguration z.B. /etc/mysql/my.cnf:

tmpdir = /tmp

Der Ordner muss für den Nutzer mysql beschreibbar sein.

Lokal speichern

Das ganze geht auch über ssh, so dass gar nicht auf dem entfernten Rechner, wo der Server läuft, gespeichert wird, weder temporäre Datei noch der endgültige Dump.

ssh USER@ADRESSE -p PORT 'mysqldump -u USER -p DATABASE | gzip -9' > SPEICHERORT/dump.sql.tar.gz

mit ssh-Proxy bzw. jumphost

...  ist das wieder ein wenig schwieriger, denn man muss innerhalb eines Befehls die ssh Verbindung zum Ziel-host über einen Proxy herstellen und den dump-Befel ausführen. Die Multihop-Situation:

     +-------+       +----------+      +-----------+
     | Laptop| <---> | Jumphost | <--> | FooServer |
     +-------+       +----------+      +-----------+

Um den FooServer zu erreichen, darf man kein Pseudo-Terminal in ssh nutzen, da ansonsten die Ergebnsisse des Kommandos als ASCII übertragen werden, also kein -t Schlter im ssh-Befehl.

ssh -o ProxyCommand='ssh USER@JUMPHOST -pPORT nc FOOSERVER 22' USER@FOOSERVER 'mysqldump -u USER -p DATABASE | gzip -9' > SPEICHERORT/dump.sql.tar.gz

Auf diese Weise kann man die Datenbank auf dem abgeschotteten Rechner lokal speichern trotz Speicherplatzmangel.

 

 

Tags