viernes, 12 de junio de 2009

Backup Simple en PostgreSQL usando pg_dump

Holas, bueno este post no es totalmente de mi autoria, pero lo he traducido y lo pongo en mi Blog por si alguien mas lo necesita, hago algunos aportes chiquititos al articulo original, para que se entienda bien en un entorno CentOs 5 y PostgreSQL 8.3
La entrada original en ingles esta en http://www.cyberciti.biz/tips/howto-backup-postgresql-databases.html

PostgreSQL es una de las bases de datos open-source mas robustas que existen. Como muchos otros RDBMS este brinda herramientas para realizar tareas de backup de la data.

Paso# 1: Ingresar al sistema como usuario postgres.

Digite el siguiente comando:
$ su postgres
Obtener la lista(s) de la(s) base de datos a sacar backup:
$ psql -l

Paso# 2: Hacer el backup usando pg_dump

Pg_dump es un utilitario para hacer backups de una base de datos PostgreSQL. Solo se puede hacer backup de una sola base de datos a la vez. Sintaxis general:
pg_dump basededatos > archivodestino

Ejemplo: Hacer backup a una base de datos llamada ventas

Escriba los siguientes comandos
$ pg_dump ventas > ventas.dump.out

Para restaurar la base de datos ventas:
$ psql -d ventas -f ventas.dump.out

O

$ createdb ventas
$ psql ventas

Sin embargo, en un ambiente de produccion siempre necesitaremos comprimir el backup de la base de datos:

$ pg_dump ventas | gzip -c > ventas.dump.out.gz

Para restaurar la base de datos usamos el siguiente comando:

$ gunzip ventas.dump.out.gz
$ psql -d ventas -f ventas.dump.out

Paso# 3: Automatizar el proceso
A continuación veremos un script en bash para realizar dicha tarea automaticamente, y luego los comandos necesarios para ponerlo en el gestor de tareas cron del linux.

Creamos el archivo backup.sh
$ nano backup.sh

Y alli escribimos el codigo siguiente:
#!/bin/bash
DIR=/backup/psql
F=$(date +%Y-%m-%0e)
export PGUSER=postgres
export PGPASSWORD=tupassword
[ ! $DIR ] && mkdir -p $DIR || :
LIST=$(psql -l | awk '{ print $1}' | grep -vE '^-|^Listado|^Nombre|template[0|1]')
#LIST="ventas produccion almacen"
for d in $LIST
do
pg_dump $d | gzip -c > $DIR/$d$F.out.gz
done
unset PGUSER
unset PGPASSWORD

Salimos guardando con Ctrl-X.
Yo reemplazo la variable LIST con los nombres de mis bases que quiero sacar backup, el comando que saca los nombres de las bases de datos en el script no me funciona del todo bien, pero la idea es esa :o).

Luego damos permisos de ejecucion al archivo backup.sh
$ chmod 755 backup.sh

Ingresamos la tarea en el cron.
$crontab -e

Configuro para que todos los dias a la 1am se realice el backup, por lo que escribo (para editar deben usar comandos de vi)
00 01 * * * /var/lib/pgsql/backup.sh

Paso #4:Backup completo de todo el gestor de base de datos.
Otra opcion es usar el comando pg_dumpall. como su nombre lo dice genera un backup de TODA la base de datos, guardando los datos de todo el gestor como usuarios, grupos y privilegios. Se puede usar el comando de la sig. forma:
$ pg_dumpall > all.dbs.out

O

$ pg_dumpall | gzip -c > todo.dbs.out.gz

Para restaurar el backup usamos el siguiente comando:
$ psql -f todo.dbs.out postgres

7 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Ola.
    Me ha gusado tu mucho lo que escribiste. Pero no se en donde escribo el pg_dump
    Podrias ayudarme a hacer paso a paso el backup.

    Por favor. Lo necesito. Gracias.
    Soy estudiante

    ResponderEliminar
  3. Anonimo..... la información del autor está más clara que el Agua.

    Saludos al Autor, muy buena info.

    ResponderEliminar
  4. Hola. como podría restaurar una base de datos postgres desde Visua Foxpro 9

    Gracias....

    ResponderEliminar
  5. Hola ya probe tu codigo y funciona sin embargo me gustaria saber si de casualidad tienes un ejemplo que se ejeute desde un servidor por ejemplo jsp

    Muchas gracias

    Att:
    caroljohanar@gmail.com

    Salu2

    ResponderEliminar
  6. Me sirvió mucho, no del todo pero muy bien explicado,..

    ResponderEliminar
  7. Hola quisiera saber como puedo respaldar una base de datos en postgres pero programada en Netbeans .
    Porfavor necesito ayuda ya que es un trabajo de la Universiad

    ResponderEliminar