Hola amigos aquí les dejo un script para que puedan sacar copias de sus bases de datos en Postgresql en Ubuntu Server.

odoo0. 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.


Javier Salazar Carlos

Soy Ingeniero de Ingeniería de Sistemas, egresado de la Universidad Nacional del Callao, especialista en Tecnologías de la Información y de las Comunicaciones (TICs).

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

code