Wie kann man eine entfernte Datenbank ohne mysqldump sichern?


8

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 mysqldumpInstallation, 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 mysqlBefehlszeilenclient eine Verbindung zum Datenbankserver herstellen . Wie kann ich den Inhalt in eine Datei a la mysqldumpim 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.commeiner 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.


1
Ich würde vorschlagen, dass Sie 'user'@'localhost'zusätzlich zu 'user'@'mysql.example.com'MySQL Berechtigungen erteilen , anstatt die Hosts-Datei zu bearbeiten.
Znarkus

Antworten:


15

Sie können einen SSH-Tunnel einrichten und mysqldumpauf Ihrem lokalen Computer verwenden.

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname

1
Unter Unix wird 'localhost' anders behandelt. Wenn die Portnummer ignoriert wird, müssen Sie 127.0.0.1 verwenden, damit dies funktioniert. dev.mysql.com/doc/refman/5.0/en/connecting.html
Adrian Gunawan


0

Laden Sie dieses Skript auf Ihren Webserver hoch (ich hoffe, Sie haben mindestens FTP-Zugriff), starten Sie es, geben Sie den Datenbanknamen / Host (Adresse Ihres "separaten Servers") / Benutzernamen / Passwort an und sichern Sie die Datenbank an einem beliebigen Ort ...


0

Wenn Ihr Server ein Webserver ist, können Sie ein PHP-Skript verwenden, das die Datenbank für den Bildschirm ausgibt. Legen Sie auf Ihrem Sicherungsserver einen Cron ab, der die Dump-Seite erstellt. Dann wird Ihre Datenbank nur über HTTP auf Ihrem Sicherungsserver gespeichert.

Vergessen Sie nicht die Sicherheit: Jeder ist verfügbar, um Ihre Basis zu entleeren. Geben Sie ein Passwort oder eine IP-Beschränkung ein ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.