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 [email protected] -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.

täuschen
quelle
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
chmeee
quelle
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
1

http://sypex.net/en/ - Sie können dieses Skript für die Datenbanksicherung verwenden, nachdem Sie es auf den Server hochgeladen haben. Sehr praktisch und schnell

Vladislav Rastrusny
quelle
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 ...

Sergey
quelle
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 ...

Dom
quelle