Quiero volcar la base de datos en mi sitio alojado de forma remota a intervalos regulares utilizando un script de shell. Lamentablemente, el servidor está bloqueado bastante apretado, no tiene mysqldump
instalado, los archivos binarios no pueden ser ejecutados por usuarios normales / en directorios de inicio (por lo que no puedo "instalarlo" yo mismo) y la base de datos vive en un servidor separado, así que No puedo tomar los archivos directamente.
Lo único que puedo hacer es iniciar sesión en el servidor web a través de SSH y establecer una conexión con el servidor de bases de datos utilizando el mysql
cliente de línea de comandos. ¿Cómo puedo volcar el contenido a un archivo a la mysqldump
en formato SQL?
Bonificación: si es posible, ¿cómo puedo volcar el contenido directamente a mi final de la conexión SSH?
Me gusta la idea del túnel SSH que se propone a continuación, sin embargo, necesitaría duplicarla.
localhost -> remote web server -> remote database server
Esto funciona bien:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
Sin embargo, al intentar iniciar sesión en mysql falla:
$ 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
Supongo que espera que las credenciales del usuario sean 'user'@'mysql.example.com'
. ¿Cómo puedo convencerlo para que use eso en lugar del host "real"?
De acuerdo, lo hice funcionar agregando 127.0.0.1 mysql.example.com
a mi archivo de hosts y conectando a través de mysqldump -P 3306 -h mysql.example.com -u user -p db
. ¡Problema resuelto! Sin embargo, todavía estaría interesado en una solución que no requiera que edite el archivo de hosts.
'user'@'localhost'
además de'user'@'mysql.example.com'
en MySQL, en lugar de editar el archivo hosts.