Replicación selectiva de tablas en un esquema Maestro – Esclavo de MySQL

By on
Replicación de bases de datos

Hace unos días configurábamos una replicación de tipo Maestro – Esclavo entre dos entornos MySQL para un cliente cuando surgió la necesidad de hacer una replicación selectiva de las tablas contenidas en la base de datos maestra.

Las replicaciones de tipo Maestro – Esclavo son de tipo asíncrono, es decir, el host Maestro se encarga de generar en un log las operaciones que ha procesado y manda dicho log para que un motor esclavo se encargue de replicarlas.

A modo de breve configuración la replicación entre el Maestro y Esclavo se define de la siguiente forma:

Configuración del host Maestro

En el host que hará las funciones de maestro tendremos que configurar las siguientes opciones en su my.cnf, lo que suele ser más comodo a la hora de aislar los cambios es utilizar un fichero replicacion.cnf que alojaremos en el directorio de configuración de MySQL, por ejemplo /etc/mysql/conf.d:

Estas opciones activan un server_id que deberá ser único en el esquema de replicación, activa los logs binarios y le dice al motor que escriba las operaciones realizadas sobre la base de datos nuestra_db en el fichero de log, cuyo nombre se formará mediante la cadena dbmaster. Para que la replicación se realice de forma correcta el tipo de formato del fichero de binlog debe ser ROW.

Con esto ya estaría listo, no olvidéis reiniciar el motor MySQL para aplicar los cambios.

Configuración del host Esclavo

Una vez configurado el host Maestro pasaremos a modificar el host Esclavo, en este caso haremos la misma operación, crear un fichero replicacion.cnf dentro del directorio /etc/mysql/conf.d.

El contenido es el siguiente:

Una vez reiniciado el motor MySQL podemos empezar el proceso de sincronización inicial entre el Maestro y el Esclavo.

Replicando por primera vez la base de datos

El proceso de replicación inicial consta de dos fases. Primero bloquearemos en solo lectura la base de datos que queremos replicar (nuestra_db) y haremos un backup de la misma. Después verificaremos en qué posición del fichero del binlog está el Maestro para que, al recuperar el backup en el esclavo y configurar la replicación, la sincronización entre ambos sea válida.

El proceso puede parecer complejo pero es bastante sencillo, comenzamos entrando en el Maestro y realizando un FLUSH TABLES WITH READ LOCK:

Y posteriormente ya en el Esclavo importaremos el dump de la base de datos y configuraremos la replicación:

Modificando la replicación para excluir ciertas tablas

Si habéis seguido los pasos ya deberíais tener una replicación Maestro – Esclavo funcionando, pero ¿qué pasaría si no necesitarais replicar ciertas tablas de la base de datos?

En ocasiones hay tablas que crecen muy rápido y que no tienen ningún tipo de valor para nuestro esquema de replicación, por ejemplo, tablas de logs o tablas que no contienen información necesaria o que pueden recrearse muy fácilmente.

En este caso podemos configurar la replicación para que omita ciertas tablas ya sea mediante la exclusión específica de las mismas o utilizando un patrón. La configuración la haremos de la siguiente forma:

Como veis, la replicación está funcionando y las tablas log y toda aquella tabla que comience por error no serán replicadas desde el Maestro al Esclavo.

De esta forma, hemos configurado una replicación selectiva de una base de datos eligiendo sólo las tablas que necesitamos.