PostgreSQLHace mucho que no publico nada bajo la categoría Mini-trucos: Cosas publico acá para compartir y tener de referencia.

En este caso de nuevo trabajando con PostgreSQL tuve que hacer un par de cosas bastante sencillas y probablemente comunes:

Crear un dump de la base de datos en el servidor remoto

Conectarse al servidor por SSH e ingresar:

pg_dump nombre_bd -U usuario_bd -W -h localhost -f ~/nombre_dump

-U para pasarle el usuario para acceder a la base de datos
-W para forzar que nos pida el password
-h localhost para evitar que intente autenticarse con el usuario actual en el sistema (que en mi caso era distinto al del de la base de datos por lo que el rol no existía)
-f archivo - Dónde guardarlo

Para descargarlo a nuestra computadora (desde el prompt de nuestra computadora):

scp usuario@servidor:/path/al/dump /directorio/local

Importar

psql bd_en_local < nombre_dump

Puede ser necesario crear archivo .pgpass para el usuario (en caso de una app Rails).

Actualización

¡Gracias Rodolfo por el aporte en los comentarios!

Fernando el ssh puede ejecutar el comando y la salida stdout es del lado del cliente (ssh), por lo que puedes colocarla dentro de un pipe:

ssh usuario@servidor pg_dump nombre_bd -U usuario_bd -W -h localhost | cat > /directorio/local/nombre_dump

con este único comando te evitas ocupar espacio en el servidor para el dump y el subsecuente scp.

4 comentarios en este post

Feed de comentarios
  1. Avatar

    Rodolfo Pilas 20 mayo. 2015 - 07:37

    Fernando el ssh puede ejecutar el comando y la salida stdout es del lado del cliente (ssh), por lo que puedes colocarla dentro de un pipe:

    ssh usuario@servidor pg_dump nombre_bd -U usuario_bd -W -h localhost | cat > /directorio/local/nombre_dump

    con este único comando te evitas ocupar espacio en el servidor para el dump y el subsecuente scp.

  2. Avatar

    José Morales 15 abril. 2016 - 17:43

    Es muy interesante pero mi pregunta es ¿porque no hacer el dump directamente desde el host cliente indicando la ip del servidor? Saludos…

  3. Avatar

    Rodolfo Pilas 28 abril. 2016 - 22:55

    En ese caso José, es necesario que tengas “expuesto” el MySQL en la IP pública, para poder acceder al servicio desde el host cliente.

    Esto no es muy recomendable.

    Puedes tomar alguna medida adicional para minimizar los riesgos, como ser un tunel entre ambos o filtrar en el firewall del servidor la IP del host cliente.

    De todas formas termina siendo algo más complejo que usar ssh que es nativo en todos los Linux.

Dejar un comentario

Toasty!