Tabla de Contenidos

MySQL: configurando replicación master-master

Por el equipo de FMSI Sistemas de Informática ::: Fecha creación: 20130530

Escenario

 master1		vlsrv05		192.168.19.14
 master2		vlsrv06		192.168.19.15

Configuración

Configuramos MySQL con el archivo /etc/mysql/my.cnf en ambos servidores:

Master 1

log-bin          = /var/log/mysql/mysql-bin
server-id        = 1
auto_increment_increment= 2
auto_increment_offset   = 1

Master 2

log-bin          = /var/log/mysql/mysql-bin
server-id        = 2
auto_increment_increment= 2
auto_increment_offset   = 2

Luego se debe reiniciar el servicio mysql en ambos servidores:

service mysql restart

Creación de un usuario para replicar

Generamos el usuario “replicacion” para acceso desde cualquier host o 2 usuarios, uno para acceso desde cada servidor.

 mysql-master> GRANT REPLICATION SLAVE ON *.* TO 'replicacion'@'%' IDENTIFIED BY '<password>';
 mysql-master> FLUSH PRIVILEGES;

Esto se debería hacer en los 2 servidores, pero no hace falta en este caso porque luego se copiarán todas las bases de datos al otro servidor (inclusive 'mysql').

Igualar las bases de datos

  1. Detenemos los servicios de MySQL en ambos servidores.
  2. Copiamos y enviamos la base de datos MySQL al otro servidor:
       mysql-master# cd /var/lib && tar czvf /tmp/data-mysql.tar.gz mysql
       mysql-master# scp /tmp/data-mysql.tar.gz root@vlsrv06:/tmp
  3. En el otro servidor la descomprimimos y copiamos en /var/lib/mysql/

Activar replicación

Debemos ejecutar el siguiente comando en ambos servidores y anotar los datos:

mysql-master1> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      336 |              |                  |
+------------------+----------+--------------+------------------+
mysql-master2> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      106 |              |                  |
+------------------+----------+--------------+------------------+

Activamos la replicacion en ambos servidores utilizando los datos del paso anterior:

 mysql-master1> CHANGE MASTER TO MASTER_HOST='192.168.19.15', MASTER_USER = 'replicacion', MASTER_PASSWORD = '<password>', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 106;
 mysql-master2> CHANGE MASTER TO MASTER_HOST='192.168.19.14', MASTER_USER = 'replicacion', MASTER_PASSWORD = '<password>', MASTER_LOG_FILE = 'mysql-bin.000006 ', MASTER_LOG_POS = 336;

Iniciar los procesos slave en ambos nodos

 mysql@M1> START SLAVE;
 mysql@M2> START SLAVE;

Verificar que todo funcione

En cada uno de los servidores, el siguiente comando mostrará el servidor que está actuando como master, y la información de replicación:

 show slave status\G;

Bibliografía