Mini pique: Crear un dump de base de datos Postgres en servidor por SSH y descargarlo
Publicado el 19 de mayo de 2015Hace 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.
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.
Fernando 20 mayo. 2015 - 12:04
¡Gracias por el pique! Actualicé la entrada con tu aporte 🙂
¡Saludos!
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…
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.