¿Cómo volcar la base de datos remota sin mysqldump?

8

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 mysqldumpinstalado, 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 mysqldumpen 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 [email protected] -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.coma 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.

difunto
fuente
1
Te sugiero que concedas permisos 'user'@'localhost'además de 'user'@'mysql.example.com'en MySQL, en lugar de editar el archivo hosts.
Znarkus

Respuestas:

15

Puede configurar un túnel ssh y usarlo mysqldumpen su máquina local.

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname
chmeee
fuente
1
En Unix, 'localhost' se trata de manera diferente. En el que se ignora el número de puerto, debe usar 127.0.0.1 para que esto funcione. dev.mysql.com/doc/refman/5.0/en/connecting.html
Adrian Gunawan
1

http://sypex.net/en/ : puede usar este script para la copia de seguridad de la base de datos después de cargarlo en el servidor. Muy práctico y rápido

Vladislav Rastrusny
fuente
0

Cargue este script en su servidor web (espero que tenga al menos acceso FTP), inícielo, especifique el nombre / host de la base de datos (dirección de su "servidor separado") / nombre de usuario / contraseña y descargue la base de datos en la ubicación que desee ...

Sergey
fuente
0

Si su servidor es un servidor web, puede usar un script PHP que vuelca la base de datos a la pantalla. En su servidor de respaldo, coloque un cron que wget la página de volcado. Luego, su base de datos se descarga a su servidor de respaldo solo por HTTP.

No olvides la seguridad: todos están disponibles para volcar tu base. Ponga una contraseña o una limitación de IP ...

Dom
fuente