Respaldo automatico de bases de datos PostgreSQL
Un punto muy importante cuando se realiza una implantación es gestionar el respaldo de las bases de datos. Dependiendo del tipo de proyecto se puede optar por una estrategia u otra, pero como minimo lo normal será realizar una copia diaria de la base de datos. En este post veremos como realizar un script para Linux que realice la copia de la base de datos con pg_dum y que se ejecute diariamente usando cron. Tanto OpenERP como Openbravo funcionan sobre base de datos PostgresSQL, así que este script nos valdrá para los dos sistemas.
Lo primero vamos a ver como hacer un script que primero realice un vacuum de la base de datos para optimizar el rendimiento y luego realiza la copia de la base de datos poniendo como nombre la fecha actual y guardandola en el directorio que hayamos escogido.
export FECHA=`date +%Y%m%d`
export NAME=${FECHA}.dmp
export DIR=/opt/backup
cd $DIR
> ${NAME}
# chmod 777 ${NAME}
export PGPASSWORD=<em>password_db_user</em>
vacuumdb -U <em>db_user</em> -h localhost -d <em>database_name</em> -f -z -v
pg_dump -U<em> db_user</em> -h localhost -F c -b -v -f ${NAME} <em>database_name</em>
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.4 stop
/etc/init.d/postgresql-8.4 start
IMPORTANTE Si la copia de la base de datos es de OpenERP, si reinicias PostgreSQL tendrás que reiniciar también el servidor de OpenERP.
/etc/init.d/openerp-server stop
/etc/init.d/postgresql-8.4 stop
/etc/init.d/postgresql-8.4 start
/etc/init.d/openerp-server start
/etc/init.d/openerp-web start
Dependiendo de como tengas la configuración de postgres puede que te pida el password del usuario que uses para acceder a la base de datos, para que el script se pueda utilizar sin que pisa esta contraseña tenemos que almacenar la contraseña del usuario en $PG_PASSWORD esto lo hacemos en la linea: export PGPASSWORD=password_db_user.
Lo primero creamos el fichero con el contenido que he puesto antes, lo hacemos ejecutable y hacemos que pertenezca al usuario con el que vamos a lanzar el script, en este caso con postgres, y creamos un fichero de log
nano /opt/backup/do_backup.sh
nano /opt/backup/do_backup.log
chown postgres /opt/backup/do_backup.sh
chmod +x /opt/backup/do_backup.sh
Una vez que tengamos el script preparado para ejecutarlo hay que programarlo en cron para que se lance a diario, para programarlo con el cron abrimos una consola ejecutamos
con esto se abre el fichero de configuración de cron para añadirle la linea que ejecute nuestro script, en este caso se va a ejecutar todos los días a las 5:00 de la madrugada
0 5 * * * /opt/backup/do_backup.sh >> /opt/backup/do_backup.log 2>&1
Con esto se van creando copias de la base de datos todos los días poniendo como nombre del fichero la fecha en que se realizó la copia, si queremos recuperar una copia de seguridad, lo primero que hay que hacer es crear la base de datos en la que vamos a restaurar los datos, si ya existe primero hay que eliminarla
CREATE DATABASE <em>database_name</em> WITH ENCODING='UTF8' OWNER=<em>database_user</em>;
\q
y para restaurar los datos
En el próximo post podemos ver como realizar otro script para mover la copia de la base de datos en otro servidor.
Tags: Consultoria, Empezar con OpenERP, Openbravo, OpenERP, PostgreSQL
[...] Original post: Respaldo automatico de bases de datos PostgreSQL | Angel Moya [...]
hola, me gusto tu exposicion decomo automatizar backups de una bd, yo quiero hacer algo similar, pero con una base de datos en informix, me cree el script que saca el backup, lo probe y funciona si lo ejecuto manualmente, pero cuando programo el cron no se ejecuta el backup por completo, de hecho solo se crea el directorio para el backup, y no hace el backup de la bd, que puedo hacer? alguna sugerencia?? me puedes ayudar
saludos
Hola, la verdad que no he trabajado nunca con informix, pero puede que el problema sea con los permisos del usuario con el que estés ejecutando el cron. Las tareas cron pueden ejecutar con diferentes usuarios, si ejecutas “crontab -e” con el mismo usuario que realizas la copia de la base de datos y tienes permiso de escritura en el directorio debería dejarte.
pues mira, no creo que sea problema de permisos, pues el cron lo cree bajo el usuario q saca backup de la bd, y como dije el script corre bien cuando ejecuto con el mismo usuario. Pero hay algo revisando el log q me arroja el cron me sale “command not found” en la linea que saca backup de la bd: “dbexport mibd -o /var/backup/”, al parecer cron no esta reconociendo el comando dbexport q es propio de informix. Se te ocurre q puedo hacer?gracias
Si no lo encuentra puede se problema del PATH en el momento de ejecutar via CRON, puedes probar a poner la ruta completa del ejecutable dbexport en el script, puedes comprobar metiendo en el script echo $PATH el valor que tienes cuando ejecutas el cron, y ver si es diferente al del usuario, puede no ser el mismo si cargas cosas en el PATH al inicio de sesión, y por eso no encontrarlo.
Hola, muchas gracias por la información de hacer backups. Tengo un sistema en postgres y necesito hacer copias de seguridad cada cierto tiempo y me gustaría que fuera automáticamente. Mi problema es que tengo los servidores en windows server, ¿sabrías alguna forma de realizar los backups en windows?
Gracias
Hola, hace tiempo que no toco servidores windows, pero tienen un programador de tareas, puedes mirar algo aqui, también tienes que traducir el .sh y hacer un .bat.
Hola antes que nada un saludo.
Veras tengo un par de dudas sobre tu tutorial, ya que creo que yo estoy asiendo algo mal espero y me puedas ayudar.
1° .-Para empezar en donde creo el scrip? ya que según e leído lo puedo hacer en cualquier editor de texto en este caso lo realice en gedit y cambie algunas cosas de tu código al mío por ejemplo contraseñas y nombre de la base de datos. ¿realice lo correcto?
2°.- ¿Cómo lo guardo y en donde? porque lo que hice fue guardarlo con el nombre do_backup en la carpeta de opt/backup.
La verdad trabajo muy poco en Linux pero en esta ocasión tengo que hacer el respaldo y la verdad tu tutorial fue el más completo que encontré.
Gracias de antemano.
Hola, lo que has dicho es correcto, lo puedes crear con cualquier editor y guardarlo en cualquier sitio, sólo tienes que tener en cuenta el usuario y los permisos, si creas el directorio /opt/backup lo tendrás que crear como root, porque /opt es del root, y luego cambiar le el usuario con “sudo chown usuario /opt/backup” y el grupo con “sudo chgrp grupo /opt/backup”. Después de guardarlo hazlo ejecutable con “chmod +x /opt/backup/do_backup” y prueba a ejecutarlo
Muy bueno el post. Lo probé y funcionó. Muchas gracias.
Muy bueno el post. Hasta lo probé y funcionó. Muchas gracias.