lunes, 24 de octubre de 2016

Linux Respaldo, Cron y Restauracion de PostgreSQL 9.x.

Uno de las tareas de todo administrador de sistemas y sobre todo los que emprenden ese camino, los respaldo son uno de los tantas tareas que en ninguna empresa ponen atencion, solo nosotros sabemos lo critico de estas funciones.

Un respaldo nunca se sabe cuando van a necesitarse, pero es preferible  programarlos y revisar que se lleven a cabo, nunca debe uno confiarse que siempre corren, la mayoria ya tiene funciones que envian correos cuando estos se llevan a cabo.

Pero aqui vamos a ver como se llevan los respaldos con las funciones internas de PostgreSQL y unos trucos para no tener que poner la clave en los  batch de respaldo.

Para iniciar, postgres cuenta con una herramienta llamada 'pg_dump', esta una de las funciones que se usan para obtener los respaldos de la BD.

Esta funcion yo la uso en un batch que lo ejecuto durante la madrugada para no interferir con las funciones durante las horas laborales, sin embargo ahi que saber ejecutarlo cuando sea necesario, por ejemplo cuandot tienes un servidor de desarrollo y tienes que actualizar la BD para que la(o)s programadores puedan tener la info lo mas actualizada posible y poder hacer mejores pruebas durante el desarrollo de sus aplicaciones o reportes.

Pero vamos a ensuciarnos la mano, yo obtengo los respaldos de esta manera, vamos respaldar la bd de nombre: bucardo.

Fig. 1 Base de Datos.
La figura muestra una de las BD que vamos a respaldar, entonces ejecutamos este comando, solo calculen cuanto espacio deben tener disponible donde vayan a guardar el respaldo no vaya ser que se queden sin espacio.

Antes de ejecutar el comando, yo creo un folder llamado 'respaldo' dentro de '/opt' ahi meto mi respaldo.

cd /opt
mkdir respaldo
cd respaldo

Fig. 2 pg_dump en operacion.
Que significa los parametros:

-E Collate, si ven la figura 1 ahi viene esa columna.
-U usuario que ejecuta la tarea, debe tener la bandera 'SUPERUSER', en este caso postgres es el adecuado.
-F Formato del archivo a generar, en este caso tipo 'p', archivo de texto o llamado plano con puras instrucciones SQL estandar.
-b Incluir campos tipo blow o sea grandes, nosotros usamos imagenes dentro de la base de datos tipo blow.
-f nombre del archivo a genera, o sea es el archivo principal a respaldar.
por ultimo le proporcionamos el nombre de la base de datos que vamos a respaldar.

Aqui ya tenemos nuestro respaldo, podemos enviarlselo a nuestro sistema de respaldo de red como bacula en mi caso.

Aqui lo hemos hecho a mano, pero como vamos a meterlo a un batch para que se ejecute a las 2AM todos los dias?

Antes de llevar esto a cabo, debemos hacer unos ajustes a nuestro sistema, por que? Como le vamos a dar el password al batch? Dentro del mismo batch? Es inseguro.

Para ello PostgreSQL tiene una manera un poco mas segura para esto, se genera un archivo dentro de la raiz de usuario que ejecutara el batch, en mi caso es root, el archivo contiene ciertos campos y ahi dentro le escribimos el password del usuario 'postgres' para cada BD que vamos a respaldar.

Ese archivo se llama '.pgpass', si notan ese archivo inicia con '.' lo que significa que esta escondido y un simple 'ls' o 'dir' no veras este archivo, con un 'ls -la' ya podras verlo como muestra la siguiente figura:

Fig. 3. Archivo .pgpass.
Creamos el archivo con el comando 'touch' y agregamos estos campos:

Fig. 4. Contenido de archivo '.pgpass'.
Si observan existen 5 columnas:

IP-del-equipo:PuertoDePSQL:BasedeDatos:Usuario:ClavedelUsuario

Como estamos llevando esto en el mismo servidor, con 'localhost' es suficiente. Salvan el archivo y le dan los permisos 0600 para que solo el usuario 'root' pueda accesarlo y verlo.

chmod 0600 .pgpass

Ya con esto que pasara?

Bien trate de accesar con el usuario 'root' la consola de postgres, claro si su archivo 'pg_hba.conf' de PostgreSQL tiene como seguridad el hash 'md5'.

En mi caso soy paranoico asi que yo uso md5, por tanto que sucedera ahora?

Pues muy facil, cuando ejecutamos 'psql postgres postgres' el sistema ya no solicitara la clave del usuario postgres :-), que implica esto?

Pues casi nada, nuestro batch solo requiere que exportemos este archivo en nuestro batch para que no requirea la invervencion humana.

Batch

Ahora si, vamos a crear nuestro batch y quedaria asi:

Fig. 5 Batch de Respaldo.
Ahi lo tienen, como ven? Ahora ese batch y el 'pgpass', lo pueden editar y meter todas las base de datos que tengan en PostgreSQL y hacer los mismo con el batch para abarcar todas sus BD's, pero eso se los dejo a su creatividad.

Ya solo salvan su archivo, lo dan su bit de ejecucion:

chmod +x mibatch.sh

Cron

Ahora sigue trabajar con cron, el cual quedaria asi:

Fig. 6. Configuracion de cron para nuestro batch de respaldo.
Asi quedaria nuestro batch, a las 2AM todos los dias se ejecutara, ya solo le digo a bacula que vaya y tome ese archivo cuando pase a recoger los archivos a respaldar, pero esa es otra historia(bacula).

Restauracion
Nos dicen que requerimos sacar un respaldo de la base de datos de la base de datos de nombre 'bucardo', esto es mas sencillo de lo que parece. 1ro que nada ocupamos el archivo de nuestro respaldo que vamos a utilizar para la restauracion, de ahi vamos a ejecutar ciertos comandos en la consola de PostgreSQL, cuales?

1) Accesar la consola de PostgreSQL.
2) Borrar la bd que vamos a restaurar.
3) Crear de nuevo la bd para quede en blanco.
4) Ejecutar el comando de restauracion.

Simples y rapidos pasos.

Paso 1) Entrar a la consola de PostgreSQL:

Fig. 6 Consola de PostgreSQL.
2) Borrar la bd que vamos a restaurar.

En mi ejemplo vamos a restaurar la bd de nombre 'mibd', como su contenido ya no es necesario, pero se preguntaran y tiene tablas? Pues vamos conectadonos a esa bd y listando sus tablas:

Fig 7. Conectadonos a el bd a borrar.
En la consola ejecutamos el comando '\dp;' y nos arrojara todas las tablas de la bd 'mibd' como muestra la siguiente figura.

Fig 8. Listado de tablas.
Ya nos mostro la fig. 8 que nuestra bd tiene 


drop database mibd;



No hay comentarios:

Publicar un comentario