lunes, marzo 22, 2010

Haciendo un respaldo total de las bases de datos PostgreSQL

Nota para el lector casual: Si su interés no es técnico o si el título de este artículo le resulta familiar al arameo antiguo entonces le recomiendo solamente pasar a saludar :-)

Problema: Es necesario realizar un respaldo total de todas las bases de datos que existen en una máquina. Estas bases de datos están sostenidas sobre PostgreSQL.

Solución:
  1. Acceder como root
  2. Habilitar el acceso en modo confianza (trust) para las conexiones locales. Para ello bastará editar el archivo pg_hba.conf , buscar la línea que se refiere a 127.0.0.1 y editarla para que quede como:
    host all all 127.0.0.1/32 trust
    Si no sabemos donde puede estar este archivo, lo podemos encontrar ejecutando:
    find / | grep pg_hba.conf
    lo que nos entregará la ruta completa hacia el archivo.
  3. Reiniciar el servicio de PostgreSQL. Normalmente esto resulta con alguno de estos comandos:
    service postgresql restart
    o bién
    /etc/init.d/postgresql restart
    Eventualmente, dependiendo de la distribución de Linux usada, y del PostgreSQL instalado, el nombre del servicio puede variar. Ante la duda vayan a /etc/init.d y ejecuten un:
    ls p*
    lo que listará todas las opciones de servicios que empiecen con p.
  4. Crear una ruta donde guardar los respaldos, por ejemplo una carpeta sql
    mkdir sql
  5. Cambiar a la carpeta recien creada
    cd sql
  6. Ejecutar el toxi-comando (en una sola línea):
    psql -lt -U postgres | awk '{ print $1 }' | xargs -i pg_dump -h localhost -U postgres -cO -Ft -f `date +%Y%m%d%H%M%S`_{}.tar -d {}
    Esto creará un archivo de extensión .tar con prefijo fecha_actual_ seguidi por el nombre de la base de datos.

Es recomendable que trás hacer el respaldo de la base de datos, restauren la línea del archivo pg_hba.conf que cambiaron a su estado anterior (posiblemente en vez de trust sea md5 o sameuser) y reinicien PostgreSQL (ver paso 3).

La restauración de estos archivos se hace con pg_restore, pero eso lo dejamos para otro día. Si su urgencia es mayor ejecuten el comando:
man pg_restore
o bién
pg_restore --help

Eso sería por el día de hoy. Que les vaya bonito.

1 comentario:

José Ignacio Santa Cruz dijo...

Para auqellos curiosos que además lean los comentarios les entrego el comando para restaurar las bases de datos:
pg_restore -U usuario -cO -F t -d basededatos archivo.tar