Respaldo automatico de base de datos PostgreSQL con SVN

Para realizar un respaldo a nuestra base de datos postgres y utilizando el control de versiones debemos crear un repositorio y usuario único de svn quien representara al servidor al momento de realizar cambios en los archivos.
Ya teniendo el repositorio creado para el respaldo de base de datos (llamado svnprueba), el usuario principal SVN para el servidor  (llamado serveruser),  debemos primero seguir estos pasos:
Ir a la siguiente dirección: dando a entender que en esta dirección tendremos la carpeta de respaldo de la base de datos

# cd /var/lib/psql

Ahora realizaremos un checkoutcon el repositorio creado anteriormente y creando la carpeta backup

# svn co http://192.0.0.255/svnprueba/trunk backup

Ahora vamos a darle permisos a la carpeta backup y consultamos los archivos para verificar que tenemos una versión de svn

# chmod 777 /var/lib/psql/backup
#ls -all /var/lib/psql/backup

Debemos crear el archivo sh donde están los script para generar el respaldo de la base de datos dentro de la carpeta backup.

#nano /var/lib/psql/backup/prueba.sh
#nano /var/lib/psql/backup/prueba.log
Ahora debemos ejecutar este comando por consola con los parámetros correctos
# Hace Backup de produccion, poniendo como nombre la fecha del dian que se ejecuta
export ARCHIVO=’siceng’
export FECHA =`date +%Y%m%d`
export NAME=${ARCHIVO}.dmp
export DIR=/var/lib/psql/backup
cd $DIR
> ${NAME}
# chmod 777 ${NAME}
export PGPASSWORD=password_db_user
vacuumdb -U db_user -h localhost -d database_name -f -z -v
pg_dump -U db_user -h localhost -F c -b -v -f ${NAME} database_name
return_code=$?
if [ $return_code -ne 0 ]
then
echo ‘Error en el backup. Compruebe: usuario y permisos’
else
gzip -f *.dmp
echo ‘Backup realizado correctamente. Archivo’ ${DIR}/${NAME}.gz
fi
echo ${FECHA} ‘ Reiniciando la base de datos’
/etc/init.d/postgresql-8.3 stop
/etc/init.d/postgresql-8.3 start
#Creando fichero log
nano /var/lib/psql/backup/prueba.sh
nano /var/lib/psql/backup/prueba.log
chown postgres /var/lib/psql/backup/prueba.sh
chmod +x /var/lib/psql/backup/prueba.sh
Colocar Salir ctrl+x y no salvar cambios N+enter
Ahora debemos colocar el script de prueba.sh.
# Hace Backup de produccion, poniendo como nombre la fecha del dian que se ejecuta
export ARCHIVO=’pruebabk’
export FECHA=`date +%Y%m%d`
export NAME=${ARCHIVO}.dmp
export DIR=/var/lib/psql/backup
cd $DIR
> ${NAME}
# chmod 777 ${NAME}
export PGPASSWORD=xxxx
vacuumdb -U user  -h localhost -d prueba -f -z -v
pg_dump -U user   -h localhost -F c -b -v -f ${NAME} prueba
return_code=$?
if [ $return_code -ne 0 ]
then
echo ‘Error en el backup. Compruebe: usuario y permisos’
else
gzip -f *.dmp
echo ‘Backup realizado correctamente. Archivo’ ${DIR}/${NAME}.gz
fi
echo ${FECHA} ‘ Reiniciando la base de datos’
/etc/init.d/postgresql-8.3 stop
/etc/init.d/postgresql-8.3 start
nano /var/lib/psql/backup/prueba.sh
nano /var/lib/psql/backup/prueba.log
chown postgres /var/lib/psql/backup/prueba.sh
chmod +x /var/lib/psql/backup/prueba.sh
svn ci -m ${FECHA}
Ahora podemos añadir los archivos a nuestro repositorio de SVN para después realizar commint
#PARA LA PRIMERA VEZ, AÑADIR LOS ARCHIVOS A VERSIONAR
svn add pruebabk.dmp.gz
svn add prueba.log
svn add prueba.sh
#YA CUANDO ESTEN VERSIONADOS, SOLO REALIZAR COMMINT
svn ci -m “Primera version”

Debemos colocar la clave root, después usuario y contraseña del usuario del servidor, que el cual configuramos al principio del manual llamado serveruser
Despues de crear nuestro script, debemos configurar el crom del sistema operativo, escribimos en consola la siguiente dirección:

# crontab -e

Ahora colocaremos las condiciones del crom cuyas descripciones son las siguientes:

m
Minuto. Determina en qué minuto de la hora será ejecutado el comando. Este valor estará entre 0 y 59.
h
Hora. Controla la hora del día en que se ejecutará el comando. Este valor estará entre 0 y 23, siendo 0 medianoche.
dom
Día del mes a ejecutar el comando. Si ponemos aquí un 10, el comando se ejecutará solamente los días 10 de cada mes establecido, a la hora y minuto establecidos.
mon
Mes. Especificaremos qué mes queremos que se ejecute el comando.
dow
Día de la semana. De 0 a 7, donde 0 es domingo, 1 es lunes… 6 es sábado y 7 otra vez domingo. Semana anglosajona: de 0 a 6. Nuestra semana: 1 a 7.
command
El comando a ejecutar. Como comando se entiende cualquier comando, programa o script que podamos escribir en la línea de comandos.

A continuación podemos ofrecer los siguientes ejemplos:

30 12 * * *
Cada día del año a las 12:30
0 22 * * 6
Todos los domingos del año a las 22:00
0 */8 * * 1-5
Cada 8 horas (en punto), de lunes a viernes.
0 */8 * * 1-5
Cada 8 horas (en punto), de lunes a viernes.
0 0 * 1-3 1,5,6
Todos los lunes, viernes y sábados a medianoche desde enero hasta marzo.

Usamos * si deseamos dejar los calores en nulo.
La sintaxis por consola es la siguiente:

# m h dom mon dow command
0 3 * * * /var/lib/psql/backup/prueba.sh >> /var/lib/psql/backup/prueba.log  2>&1

Esta sintaxis describe que el cron se ejecutara todos los días a las 3:00 am donde se leera el scrip ubicado en /var/lib/psql/backup/prueba.sh y se sobreescribe el log ubicado en /var/lib/psql/backup/prueba.log  donde el log requiere de la ejecución del archivo .sh (2>&1)
Para verificar que nuestro respaldo esta correcto podemos verificar por el siguiente comando:

#ls –l /var/lib/psql/backup/
#chmod 777 /var/lib/psql/backup/

Si vemos que no se realize el respaldo, ó sencillamente no corre el crom podemos consultar el log

#nano /var/lib/psql/backup/prueba.log