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 mysqldump
installé, 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 mysql
client de ligne de commande. Comment puis-je vider le contenu dans un fichier à la mysqldump
format 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.
'user'@'localhost'
en plus de'user'@'mysql.example.com'
dans MySQL, au lieu de modifier le fichier hosts.