Programar copias de seguridad de Postgresql (CRON + Shell Script + Dropbox)

Generalmente yo no administro los servidores de mis clientes, a pesar de ello a veces me toca hacer las veces de administrador o sugerir ciertas cosas. Una de las cosas que suelo hacer es planificar un script en CRON para que haga una copia de seguridad de la base de datos todos los días y a partir de ahí ya se encargan ellos de hacer lo que consideren oportuno.

Estaba dándole vueltas a este tema cuando se me ocurrió la idea de utilizar alguna nube para sacar las copias fuera del servidor, la cuestión es que había que hacerlo de forma que no tuvieramos problemas de seguridad y privacidad en el proceso. Hay que tener en cuenta que el hecho de  subir nuestros archivos a otro servidor en la nube inherentemente hace que perdamos el control de nuestros datos y eso no podía pasar, ¿la solución? cifrar los datos.

 

Primero  necesitamos programar un script para que vuelque la base de datos a disco y que posteriormente la cifre. El Shell Script que yo utilizo lo he subido a github en un repositorio llamado backupscript, si alguien lo quiere utilizar tiene licencia GPL 3. Una apreciación, yo cifro los datos con GnuPG así que tendréis que tenerlo instalado y generar las claves pública privada para poder utilizarlo. El siguiente paso es utilizar el Shell Script como una tarea de CRON,  esto es sencillo ya que simplemente habrá que copiarlo por ejemplo al cron.daily. Por último tendremos que utlizar alguna herramienta para poder subir las copias a la nube, en este caso yo he utilizado Dropbox por dos motivos, el primero porque el cliente de Dropbox es libre con licencia GPL y el segundo porque proporciona la función de sincronización automática sobre un directorio lo cual significa que inmediatamente después de copiarse el archivo a disco se empieza a sincronizar con la nube.

Tutoriales sobre la instalación del cliente de Dropbox en Gnu/Linux hay muchos en internet así que no voy a explicar esta parte, lo que si quería comentar es que como Dropbox sincroniza sobre el directorio del mismo nombre «Dropbox» del $HOME del usuario y generalmente no vamos a querer dejar los archivos en esa ruta lo que podemos hacer es crear un enlace simbólico para solucionar este problema.

 

Yo lo tengo funcionando desde hace unos días en un servidor de un cliente y la verdad es que va de maravilla.

 

Cheli

Instalar el depurador de Postgresql en Debian / Ubuntu

Es una tarea que tenía pendiente desde hace tiempo, pero después de que mi amigo Pablo me comentara que lo había compilado en su Freidora Fedora y que funcionaba bastante bien me decidí a ponerlo.

 

Para poder depurar código en Postgresql hay que instalar una extensión en el servidor.  El problema es que esta extensión viene en forma de código fuente que hay que compilar, y para poder compilarlo necesitamos hacerlo contra el código de Postgresql, así que lo primero que hay que hacer es instalar el paquete postgresql-server-dev-8.4 (en mi caso 8.4 porque es la versión soportada por Openbravo 2.50).

 

Se suponía que con este paquete era suficiente ya que trae todos los archivos de cabecera necesario para compilar las extensiones de Postgresql, pero la verdad es que a mi no me funcionó, seguramente porque el código de la extensión espera encontrarse los fuentes de Postgresql en el formato que tiene cuando lo descargamos desde su página web. Lo que hice entonces fué descargame el código fuente desde la página de  Postgresql.

 

Primero tenemos que saber qué versión de Postgresql estamos ejecutando. Podemos verlo por ejemplo desde el gestor de paquetes.

dpkg -l | grep postgresql-8.4
ii  postgresql-8.4     8.4.9-0ubuntu0.11.04     object-relational SQL …

 

Ahora tenemos que descargar dicha versión.

 

wget http://ftp.postgresql.org/pub/source/v8.4.9/postgresql-8.4.9.tar.bz2

 

Descomprimimos y desempaquetamos.

 

tar xvfj postgresql-8.4.9.tar.bz2

 

Ahora tenemos que ejecutar el configure, pero para saber las opciones con las que se compiló nuestro servidor de postgres en ejecución podemos apoyarnos en la orden pg_config.

 

pg_config –configure | ./configure

 

Luego compilamos con make y ya tenemos el código de Postgresql preparado para compilar nuestra extensión.

 

Nota: No he indicado las librerias de desarrollo necesarias para compilar Postgres porque dependerá de vuestra instalación.

 

El siguiente paso es descargar el código de la extensión y copiarlo al directorio contrib. El problema es que la última versión disponible no compila correctamente pero si la última versión del cvs, así que utilizaremos esta última.

 

cd contrib

cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger login
cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger checkout server

 

Actualización: Ahora el proyecto está en un repositorio git.

http://git.postgresql.org/gitweb/?p=pldebugger.git;a=summary

 

Esto nos generará un directorio que se llama server, entramos en él y hacemos make.

 

cd server

make

 

Si todo ha ido bien ya tenemos la extensión compilada, ahora sólo nos queda hacer un make install como root.

 

Nos quedan dos cositas para que la extensión funcione, la primera es cargarla en el arranque de  Postgresql. Editamos el archivo postgresql.conf de nuestro servidor y añadimos la siguiente linea.

 

shared_preload_libraries = ‘/usr/lib/postgresql/plugins/plugin_debugger’

 

Nota: la ruta puede cambiar dependiendo de la instalación.

La segunda cosa que hay que hacer es abrir pgadmin y ejecutar el script sql que encontraremos en el archivo pldbgapi.sql del código de la extensión. Pero antes deberemos substituir cada aparición de $libdir por «/usr/lib/postgresql» para que funcione.

 

El depurador es un poco limitado pero nos permite hacer cosas chulas como la siguiente.

 

 

Ahora ya podéis depurar vuestro código.

 

Cheli