lunes, 18 de noviembre de 2013

Backup de bases de datos PostgreSQL en línea de comandos

Para los que utilicéis bases de datos PostgreSQL es posible que este post os resulte de utilidad. Los que no lo conozcáis os animo a que le dediquéis un tiempo: actualmente es el gestor de bases de datos orientadas a objetos libre más potente del mercado.


Existen varias formas de hacer un backup de una base de datos PostgreSQL, aunque las más usadas son:


  • En entorno gráfico con PgAdmin (software gratuito distribuido junto a PostgreSQL).
  • Vía web si tenemos instalado PHPPgAdmin.
  • Desde línea de comandos (el caso que nos ocupa).
¿Por qué desde línea de comandos? Si administráis servidores os interesará automatizar la tarea mediante un script, de modo que no tengáis que realizar la copia manualmente cada cierto tiempo. 

En la distribución de PostgreSQL existe un ejecutable llamado pg_dump que nos permite realizar la copia de una base de datos a un archivo. La sintaxis es la siguiente:


  • Backup: pg_dump -i -h localhost -p 5432 -U usuario -f archivo.sql NombreBD
  • Restore: psql -p 5432 -U usuario -d NombreBD -f archivo.sql
Estas sentencias presuponen un servidor local, el puerto 5432 (que podemos cambiar a nuestra conveniencia) y el resto de parámetros que modificaremos para conectar con nuestra base de datos (usuario, archivo.sql y NombreBD). Sobra decir que el usuario que utilicemos debe tener permisos en el servidor para realizar copias de seguridad y acceder a la base de datos (recomendamos utilizar el usuario postgres).

Si ejecutamos la sentencia de backup nos aparecerá un prompt para que ingresemos manualmente la clave. Para evitarlo y automatizar la tarea hay una alternativa: eliminar el parámetro -p y establecer temporalmente el valor de la variable PGPASSWORD con la clave del usuario que queramos utilizar (no olvidéis volverla a establecer a una cadena vacía una vez lanzada la sentencia en el script):

  • Linux: PGPASSWORD=miclave
PGPASSWORD=postgres 
pg_dump -U postgres -h localhost basedatos > /mnt/backup/linuxPgbasedatos.sql
PGPASSWORD=
  • Windows: SET PGPASSWORD=miclave
SET PGPASSWORD=miclave
 pg_dump -i -h localhost -p 5432 -U postgres -f c:\backup\windowsPgbasedatos.sql basedatos
SET PGPASSWORD=

Luego ya sólo queda lanzar el script desde el cron (Linux) o el programador de tareas (Windows) y tendremos automatizado el backup de la base de datos.

[Actualizado 06/05/2014]

Si necesitáis transferir el fichero de backup a otro equipo vía FTP no olvidéis establecer el flujo de datos a binario (comando binary de FTP).

No hay comentarios:

Publicar un comentario

Recomendaciones de Alcasoft