Como especifica el título para esta entrada, Bucardo es un sistema de replicación que en otras palabras permite "clonar" o "duplicar" registros dentre Base de Datos (fuentes-objetivos), ademas cuenta con soporte para manejar múltiples Base de Datos con relaciones maestros-esclavos.
Aunque el fuente debe ser una Base de Datos PostgreSQL el objetivo puede ser PostgreSQL, MySQL, Redis, Oracle, MariaDB, SQLite, o MongoDB.
Los pasos para instalar Bucardo en Linux es muy sencillo (como veremos en la siguiente sección) aunque Bucardo puede ser un poco dificil de instalar debido a varias configuraciones y dependencias necesarias a nivel del Sistema Operativo pero en esta entrada podrás encontrar una sección en donde hablamos de Errores que me ocurrieron mientras instalaba Bucardo.
Esta entrada ofrece una rápida pero completa vista a Bucardo comenzando por su instalación en un ambiente Linux, su configuración, algunos errores que te pueden aparecer en el proceso de su instalación y culminado la entrada realizando un pequeño experimento con una simple relación Maestro-Maestro con Base de Datos PostgreSQL.
Instalando Bucardo en Ubuntu -parte 1-
En esta sección daremos unos tips de como instalar Bucardo en su versión 5.3.1 en Ubuntu, aunque el procedimiento es el mismo para otras distribuciones Linux; primero descargamos el Bucardo.tar.gz desde la sección de descargas.
Desempaquetamos el paquete y nos ubicamos desde la terminal en la carpeta; para el momento en que se escribió esta entrada es la versión es la 5.3.1:
cd Bucardo-5.3.1/
Generamos el Makefile
:
perl Makefile.PL Generating a Unix-style Makefile Writing Makefile for Bucardo Writing MYMETA.yml and MYMETA.json
Lo más recomendable es que obtengas tu copia de bucardo desde su repositorio de GitHub en: git clone git://bucardo.org/bucardo.git
Finalmente instalamos Bucardo:
make make install
En Fedora existe otro método para hacernos con una copia de Bucardo, y consiste en instalarlo mediante los repositorios:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm yum -y install bucardo
Configurando el ambiente en PostgreSQL para Bucardo
Una vez que instalamos la primera fase de Bucardo a través de los Makefile
, vamos a PGAdmin o cualquier otro Administrador y creamos una Base de Datos y Rol (con SuperUsuario) llamada "bucardo":
Configurando Bucardo -parte 2-
Ahora seguiremos con la instalación de Bucardo según las configuraciones realizadas en PostgreSQL; para ello debemos ejecutar en un terminal:
bucardo install
o -dependiendo de la fuente de instalación.-
bucardo_ctl install
Veremos la siguiente información:
Current connection settings: 1. Host: <none> 2. Port: 5432 3. User: postgres 4. Database: bucardo 5. PID directory: /var/run/bucardo
Si el directorio /var/run/bucardo
no existe, créelo a través de: mkdir /var/run/bucardo
Se especifica el Host
, usuario y base de datos creados anteriormente:
Current connection settings: 1. Host: localhost 2. Port: 5432 3. User: bucardo 4. Database: bucardo 5. PID directory: /var/run/bucardo
Errores que me ocurrieron mientras instalaba Bucardo:
ERROR: language "plperlu" does not exist
: Instalamos el paquete con Instalamos el paquete consudo yum install postgresql-plperl
, luego de la instalación en la Base de Datos de Bucardo corrermos: CREATE EXTENSION plperl; CREATE LANGUAGE plperlu;ERROR: permission denied for language plperlu
Coloque al usuario como SuperUser desde la interfaz de pgAdmin- Para algún error concerniente a la autenticación; recuerda colocar en el
pg_hba.conf
ubicado en/etc/postgresql/X.X/main/p
: - local bucardo bucardo md5
- Si al ejecutar un comando de Bucardo aparece el siguiente error: DBI connect('dbname=bucardo','bucardo',...) failed: fe_sendauth: no password supplied at /usr/local/bin/bucardo line 308. Puedes solventar el error modificando el archivo señalado en el error (/usr/local/bin/bucardo), buscar la línea de código señalada:
- Y agregar la contraseña de Bucardo:
Si todo sale bien y no ocurrió algún otro error, FELICIDADES, acabas de completar la instalación de Bucardo y ahora puedes crear todas las relaciones entre Base de Datos que quieras.
Creando una relación Maestro-Maestro con Bucardo
En esta última sección veremos cómo crear una simple relación maestro esclavo con los comandos de Bucardo los cuales explicaré brevemente a continuación:
- Primero creamos las Base de Datos; si son locales no es necesario especificar el
host
: bucardo add database <nombre> dbname=<nombrebd> user=<usuariobd> pass=<contraseñabd> - para agregar las tablas y secuencias a sincronizar: bucardo add table <tabla1> <tabla2> … relgroup=<nombrerelgroup>
- Creamos un grupo de Base de Datos para poder sincronizarlas fácilmente más adelante: bucardo add dbgroup <nombredbgroup> <nombrebd>:source <nombrebd>:source
- Ahora creamos la sincronización con: bucardo add <nombresync> mysync relgroup=<nombrerelgroup> dbs=<nombredbgroup> autokick=0
- Y activamos la sincronización: bucardo update sync <nombresync> autokick=1
Puedes encontrar la documentación oficial y completa en los enlaces al final de esta entrada.
Una vez entendido los comando básicos para crear un sistema de replicación, ahora vamos a crear una relación Maestro-Maestro en donde una de las Base de Datos se encuentra local y otra remota; para ello empleamos los siguiente comandos:
bucardo add database midblocal dbname=oo user=bucardo pass=bucardo bucardo add database midbremoto dbname=oo user=postgres pass=postgres host=<IPRemota> bucardo add table public.estatus db=midblocal relgroup=myrels bucardo add dbgroup mydbgroup midblocal:source midbremoto:source bucardo add sync mysync relgroup=myrels dbs=mydbgroup autokick=0 bucardo update sync mysync autokick=1 bucardo reload config
Finalmente iniciamos Bucardo con:
bucardo start
Y verificamos su estatus con:
bucardo status
Ahora prueba insertar registros en cualquiera de las tablas de las Base de Datos que estén sincronizadas y deberían replicarse para mantenerse sincronizadas.
Algunos enlaces de interés:
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter