Leiten Sie die Ausgabe von mysqldump nach scp um

13

Ich habe vor Jahren mit einem Linux-Profi zusammengearbeitet, der diesen tollen Trick gemacht hat. Er könnte einen mysqldump ausführen, aber die Ausgabe auf eine scp / ssh-Verbindung umleiten, anstatt auf die Festplatte zu schreiben . Wir haben diese Stille ein bisschen genutzt, wo ich früher gearbeitet habe, aber ich kann mich nicht mehr erinnern, wie ich das machen soll.

Ich stehe jetzt vor dem Problem, dass sich meine Festplatte in meinem Server in den letzten Zügen befindet und für intensive Zwecke permanent als schreibgeschützt bereitgestellt ist.

Ich hatte gehofft, diese Befehlszeilentrickserei zu nutzen, um meine Datenbanken weiterhin auf einem neuen Server sichern zu können, da das Schreiben des Dumps auf die lokale Festplatte und das Übertragen davon eindeutig nicht in Frage kommen.

Ist das eigentlich ein kleiner Trick überhaupt möglich? Wenn ja, wie lautet die Syntax?

Ich habe seitdem aufgrund des Problems mit dem schreibgeschützten Dateisystem festgestellt, dass ich nicht einmal eine Verbindung zu MySQL herstellen kann, um den Dump durchzuführen. Aber Ihr Feedback war großartig und sollte hoffentlich in Zukunft jemand anderem von Nutzen sein

xzyfer
quelle
1
"Absichten und Zwecke"
Ignacio Vazquez-Abrams

Antworten:

11

mysqldump dbname | ssh [email protected] "mysql -D dbname"

das sollte funktionieren :-)

Richten Sie auch Schlüssel zwischen den Systemen ein, damit Sie dies tun können, ohne einen Login / Pass zu benötigen :-)

Glenn Kelley
quelle
Dies ist eine wirklich raffinierte Methode, bei der der Speicherauszug direkt in mysql auf dem Remote-Server geleitet wird. Das Klonen der Datenbank ist im Wesentlichen ein Befehl. Hab ich recht?
Xzyfer
1
du hast es verstanden ;-) natürlich kannst du immer einfach auf eine datei pushen, aber ich mag die dumps, da sie es dir ermöglichen, bei bedarf auf ein backup zu rollen :-) in echtzeit, indem du einfach eine ip in deinen config dateien umstellst ... RIESIGER Nutzen. Wir machen das die ganze Zeit auf unserer Linode
Glenn Kelley
Ich habe das Gefühl, dass es hier möglicherweise Probleme mit der Pipe-Pufferung geben könnte.
Phil Hollenback
10
mysqldump ... | ssh ... "cat > out.dmp"
Ignacio Vazquez-Abrams
quelle
Dieser funktionierte großartig für mich. Ich habe die Authentifizierung mit öffentlichen Schlüsseln auf meinem Mac OS X-Laptop eingerichtet und mysqldump -p <dbname> | ssh <user>@<ip_address> "cat > <filename>.sql" genau das ausgeführt, was ich brauchte.
Harperville
2

Ich mag die Antwort von @ GlennKelley, wollte aber auf Folgendes hinweisen:

Wir hatten eine Datenbank mit 450 GB, auf dem Host wurden jedoch nur 500 GB bereitgestellt. Wir konnten nicht lokal exportieren, also haben wir remote exportiert. Wir haben die Ausgabe überprüft und es gab Hunderte von Fällen, in denen die Ausgabe aufgrund von Pipe-Pufferungsproblemen beschädigt war.

Die beste Lösung ist, von dem Zielhost, auf dem Ihr Dump enden soll, auszuführen, mysqldumpaber die -hOption für den Host zu verwenden. Zeigen Sie mit dem Host auf den MySQL-Server und exportieren Sie die Daten mit a >.

mysqldump -u root -p -h 10.1.1.199 --all-databases ...<more options>... > dump.sql
Mike Mackintosh
quelle