Ich möchte die Datenbank in regelmäßigen Abständen mithilfe eines Shell-Skripts auf meiner remote gehosteten Site sichern. Leider ist der Server ziemlich eng gesperrt, hat keine mysqldump
Installation, Binärdateien können nicht von normalen Benutzern / in Home-Verzeichnissen ausgeführt werden (daher kann ich ihn nicht selbst "installieren") und die Datenbank befindet sich auf einem separaten Server kann die Dateien nicht direkt abrufen.
Ich kann mich nur über SSH beim Webserver anmelden und über den mysql
Befehlszeilenclient eine Verbindung zum Datenbankserver herstellen . Wie kann ich den Inhalt in eine Datei a la mysqldump
im SQL-Format sichern?
Bonus: Wie kann ich den Inhalt nach Möglichkeit direkt an mein Ende der SSH-Verbindung senden?
Ich mag die unten vorgeschlagene SSH-Tunnel-Idee, aber ich müsste sie doppelt tunneln.
localhost -> remote web server -> remote database server
Das funktioniert in Ordnung:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
Der Versuch, sich bei MySQL anzumelden, schlägt jedoch fehl:
$ mysqldump -P 3306 -h localhost -u user -p db
Enter password:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
(using password: YES) when trying to connect
Ich denke, es wird erwartet, dass die Benutzeranmeldeinformationen vorliegen 'user'@'mysql.example.com'
. Wie kann ich es dazu bringen, das anstelle des "echten" Hosts zu verwenden?
Okay, ich habe es zum Laufen gebracht, indem ich es zu 127.0.0.1 mysql.example.com
meiner Hosts-Datei hinzugefügt und über verbunden habe mysqldump -P 3306 -h mysql.example.com -u user -p db
. Problem gelöst! Ich wäre immer noch an einer Lösung interessiert, bei der ich die Hosts-Datei nicht bearbeiten muss.
'user'@'localhost'
zusätzlich zu'user'@'mysql.example.com'
MySQL Berechtigungen erteilen , anstatt die Hosts-Datei zu bearbeiten.