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.sqlAm 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.sqlTemporä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 = /tmpDer 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.gzmit 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.gzAuf diese Weise kann man die Datenbank auf dem abgeschotteten Rechner lokal speichern trotz Speicherplatzmangel.