PostgreSQL: ¿Cómo hacer respaldos rotativos de una base de datos?

Antes de empezar, voy a repetir lo que siempre repito: los respaldos son 50% propiamente dicho "el respaldo", y el otro 50%, recuperarlos.

Con respecto a las formas, siempre es recomendable hacerlos a través de varios medios, como ser: cintas, discos, discos distribuidos, Raid, y nunca olvidar de hacer una versión (o más) que no se encuentre físicamente en la misma instalación de los servidores (si hay un incendio, o un robo, como hacemos para reconstruir el servidor?). Hasta se podría aprovechar alguna de las famosas cuentas de Gmail.

En este caso, el ejemplo que voy a comentar desarrolla otra forma de sentirnos un poco más seguros: las "versiones" y la "rotación" del respaldo ;-)

La idea es hacer "respaldos rotativos", es decir, respaldar nuestra base de datos rotando los días de la semana, donde por día podremos respaldar varias veces, y vamos acumulando "versiones" a través de toda la semana. Una vez que cumplamos un ciclo, es decir, si iniciamos un Lunes y luego de una semana, volvemos a caer en el Lunes, borramos los respaldos antiguos y realizamos los del día corriente.

Otro de los beneficios, además de tener respaldos de todos los días, y varias veces por semana, es que podemos dejarlo trabajar *casi* automáticamente, porque nunca correríamos peligro de quedarnos sin espacio de disco (aunque, volvemos al inicio, si se rompe el disco, se pierden todos los respaldos rotativos).

La idea es la siguiente:

Creamos una estructura como:

/var/respaldos/rotativos (en "var", porque es información "variable", como los "logs", "cache", etc).
/var/respaldos/scripts (es bueno ser ordenado, ahí van los scripts de respaldos)

Y dentro del directorio "rotativos", directorios con los nombres de los días de la semana (en este caso, en inglés y abreviados):

Fri Mon Sat Sun Thu Tue Wed

Y tenemos el primer scripts, llamado "respaldo_base.sh" (en este caso usaremos la base de datos PostgreSQL, pero perfectamente se puede cambiar los comandos para MySQL):


#!/bin/bash

DB="nombre_base_datos"
DIR_RESP="/var/respaldos/rotativos"

DIA_ACTUAL=`date +%a`
FECHA_ACTUAL=`date +%Y%m%d`
HORA_ACTUAL=`date +%H_%M`

FECHA=`date +%Y%m%d-%H:%M`
ARC_RESP="$FECHA_ACTUAL-$HORA_ACTUAL"

DESTINO=$DIR_RESP/$DIA_ACTUAL/$ARC_RESP.tar.bz2

DUMP=`which pg_dump`
GZIP=`which gzip`
PAR_DUMP=" "
PAR_GZIP="-f -q --best"

echo "Dia Actual: $DIA_ACTUAL"

$DUMP $PAR_DUMP -U root $DB | $GZIP -f -q --best >
$DIR_RESP/$DIA_ACTUAL/$DB-$ARC_RESP.sql.gz



Sugerencias, bienvenidas ;-)

No hay comentarios.:

Entradas populares