Comment vider une base de données distante sans mysqldump?


8

Je veux vider la base de données sur mon site hébergé à distance à intervalles réguliers à l'aide d'un script shell. Malheureusement, le serveur est verrouillé assez serré, n'a pas mysqldumpinstallé, les fichiers binaires ne peuvent pas être exécutés par les utilisateurs normaux / dans les répertoires personnels (donc je ne peux pas "l'installer" moi-même) et la base de données vit sur un serveur séparé, donc je ne peut pas saisir les fichiers directement.

La seule chose que je puisse faire est de me connecter au serveur Web via SSH et d'établir une connexion au serveur de base de données à l'aide du mysqlclient de ligne de commande. Comment puis-je vider le contenu dans un fichier à la mysqldumpformat SQL?
Bonus: si possible, comment puis-je vider le contenu directement à ma fin de la connexion SSH?


J'aime l'idée du tunnel SSH proposée ci-dessous, cependant, je devrais la doubler.

localhost -> remote web server -> remote database server

Cela fonctionne bien:

$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N

Cependant, la tentative de connexion à mysql échoue:

$ 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

Je suppose qu'il s'attend à ce que les informations d'identification de l'utilisateur soient 'user'@'mysql.example.com'. Comment puis-je le persuader d'utiliser cela au lieu de l'hôte "réel"?


D'accord, je l'ai fait fonctionner en ajoutant 127.0.0.1 mysql.example.comà mon fichier d'hôtes et en me connectant via mysqldump -P 3306 -h mysql.example.com -u user -p db. Problème résolu! Je serais toujours intéressé par une solution qui ne nécessite pas que je modifie le fichier hosts.


1
Je suggère que vous accordiez des autorisations pour 'user'@'localhost'en plus de 'user'@'mysql.example.com'dans MySQL, au lieu de modifier le fichier hosts.
Znarkus

Réponses:


15

Vous pouvez définir un tunnel ssh et l'utiliser mysqldumpsur votre machine locale.

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

1
Sous Unix, «localhost» est traité différemment. Dans lequel, le numéro de port est ignoré, vous devez utiliser 127.0.0.1 pour que cela fonctionne. dev.mysql.com/doc/refman/5.0/en/connecting.html
Adrian Gunawan


0

Téléchargez ce script sur votre serveur Web (j'espère que vous avez au moins un accès FTP), démarrez-le, spécifiez le nom / hôte de la base de données (adresse de votre "serveur séparé") / nom d'utilisateur / mot de passe et videz la base de données à l'emplacement de votre choix ...


0

Si votre serveur est un serveur Web, vous pouvez utiliser un script PHP qui vide la base de données à filtrer. Sur votre serveur de sauvegarde, placez un cron qui wget la page de vidage. Ensuite, votre base de données est transférée sur votre serveur de sauvegarde uniquement par HTTP.

N'oubliez pas la sécurité: tout le monde est disponible pour vider votre base. Mettez un mot de passe ou une limitation IP ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.