Hola amigos aquí les dejo un script para que puedan sacar copias de sus bases de datos en Postgresql en Ubuntu Server.
0. Iniciamos sesión como superusuario en Ubuntu Server.
Debemos modificar el tipo de acceso a MD5 a nuestro usuario de nuestra base de datos, editando el siguiente archivo:
vim /etc/postgresql/9.3/main/pg_hba.conf
Agregar debajo de la linea 85 aproximadamente lo siguiente:
# Database administrative login by Unix domain socket local all postgres peer local all MIUSERBASEDATOS md5
1. En la ruta /opt creamos la carpeta backup.
mkdir /opt/backup chmod -R 777 /opt/backup cd /opt/backup
2. Dentro de la carpeta backup creamos un archivo con nombre por ejemplo: mibackupdiario.sh
touch mibackupdiario.sh chmod 775 mibackupdiario.sh
3. Para nuestro caso usando el editor vim editamos el archivo creado y en ella copiamos lo siguiente:
vim mibackupdiario.sh
4. Copiamos el siguiente contenido dentro de ella:
# Hace Backup de DB, poniendo como nombre la fecha y hora del dia en que se ejecuta export FECHA=`date +%d-%m-%Y_%H:%M:%S` export NAME=NAMEBACKUPBASEDATOS_${FECHA}.dump export DIR=/opt/backup USER_DB=USUARIOBASEDATOS NAME_DB=NOMBREBASEDATOS cd $DIR > ${NAME} export PGPASSWORD=CLAVEDEUSUARIOBASEDATOS chmod 777 ${NAME} echo "procesando la copia de la base de datos" pg_dump -U $USER_DB -h localhost --port 5432 -f ${NAME} $NAME_DB echo "backup terminado" #Elimina archivos mayor a un dia find /opt/backup/*.dump -mtime +1 -exec rm {} \;
5. Explicando un poco el script.
Linea 2: Definimos la variale FECHA en la que capturamos la fecha y hora del sistema.
linea 3: Nombre que tendra el backup realizado a nuestra base de datos.
linea 4: Definimos una variable DIR que es el directorio en donde de almacenará los backups de la base de datos
linea 5: Definimos una variable USER_DB en la que almacenamos el usuario de nuestra base de datos
linea 6: Definimos una variable NAME_DB en la que almacenamos el nombre de nuestra base de datos al que le sacaremos copia.
linea 7: Se ingrea a /opt/backup
linea 9: Se define una variable PGPASSWORD en donde se almacena la clave del usuario de la base de datos
linea 10: Damos permiso de escritura a $NAME que es el nombre que tendra el backuo de nuestra base de datos
linea 12: Procesamos la copia o backup de nuestra base de datos
linea 16: Eliminamos las copias que tengan antiguedad mayor a 1 dia (+1), puede cambiar esto de acuerdo a su necesidad.
6. Haciendo que se ejecute el script automaticamente cada día a las 23:59, para esto usamos un el CRON del usuario de nuestro servidor.
Para ello ingresamos con el usuario normal de nuestro Servidor no como superuruario y escribimos en nuestra consola o terminal crontab -e luego elegimos la opcion 2, esto permite editar el cron con el editor nano.
user@namepc$crontab -e
no crontab for user - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.basic 4. /usr/bin/vim.tiny Choose 1-4 [2]: 2
Luego al final del archivo agregamos lo siguiente
59 23 * * * /opt/backup/mibackupdiario.sh
Guardamos el archivo, esta linea agregada permitirá realizar un backup de nuestra base de datos todos los días a las 23 hora con 59 minutos
7. Finalmente reiniciamos el servicio de CRON:
user@namepc:/opt/backup$ sudo /etc/init.d/cron restart
Muchas Gracias espero que sea se su ayuda.
6 comentarios
Concepción · 10/02/2015 a las 12:01 pm
DISCULPE LA MOLESTIA QUE LINEAS SE CAMBIARÍAN Y POR CUALES PARA QUE EL SCRIPT RESPALDE EL SISTEMA ODOO EN LUGAR DE LA BASE DE DATOS ESPERANDO RESPONDE GRACIAS
Javier Salazar Carlos · 12/02/2015 a las 6:56 am
Pienso que no necesariamente necesitas un script para hacer una copia de los archivos, ya que bastaría con que lo hagas manualmente, a menos que hagas cambios muy constantes a los archivos de Odoo.
Cristian Salas · 25/04/2016 a las 11:37 pm
Hola, disculpa la molestia, pero no logro hacer el backup, se me genera el archivo pero en 0 de capacidad.
Que estoy haciendo mal para que eso pase?
Muchas gracias.
Emilio Llinares · 18/11/2016 a las 2:12 pm
Hola Javier, tu script funciona a la perfección. Sin embargo, tengo un problema que no logro resolver. Quiero duplicar una instalación en producción en un servidor de pruebas. Primero sustituyo todos los archivos de /opt/odoo del servidor de pruebas por el /opt/odoo del servidor en producción. La copia del servidor en producción la hago con un “tar -cpvzf mibackup.tar.gz ./*” y la restauro sin problemas en el servidor de pruebas.
Por otra parte hago un pg_dump de la base de datos a duplicar y en el servidor de destino un pg_restore.
Reinicio los servicios y funciona casi todo correctamente excepto la gestión de clientes que me da un error. La aplicación esta buscando un campo “zip_id” que no existe en la base de datos. Pero eso no pasa en el servidor en producción.
¿Sabes por donde puede ir el problema? Te pego el final del error de Odoo:
File “/opt/odoo/openerp/addons/base/ir/ir_ui_view.py”, line 369, in raise_view_error
raise AttributeError(message)
AttributeError: El campo `zip_id` no existe
Error de contexto:
Vista `res.partner.form`
[view_id: 126, xml_id: base.view_partner_form, model: res.partner, parent_id: n/a]
No le veo el sentido. Si tengo la misma aplicación y base de datos en ambos servidores no debería tener problemas, ¿no?
Muchas gracias Javier
Emilio Llinares · 21/11/2016 a las 9:13 am
Hola Javier. Ya lo tengo resuelto. En vez de copiar /opt/odoo he creado en el servido de pruebas una base de datos y he instalado los módulos que tengo instalados en la base de datos del servidor de producción. Luego he borrado la base de datos de pruebas y he ejecutado el pg_restore. Ya no da error. No se bien porque pasa esto pero supongo que esta forma es el procedimiento correcto.
Un saludo
Javier Salazar Carlos · 04/12/2016 a las 12:58 pm
Muy bien felicitaciones.