Configurando una replicación Master a Master usando MySQL

Todos sabemos de la importancia de implementar mecanismos de alta disponibilidad en los servidores que nos toca administrar. En este caso, voy a detallar los pasos para implementar una replicación master to master o bidireccional entre servidores MySQL (una especie de espejado o mirror).

En ambos servers debemos hacer las siguientes tareas:

1. Crear una carpeta Logs, por ejemplo:
c:\program files\mysql\logs\

2. Crear un usuario para la replicación con suficientes permisos.

mysql -u root -pSuPassword (sin espacios el pass y el -p)
GRANT REPLICATION SLAVE ON *.* TO 'usuario'@'%' IDENTIFIED BY 'pepe';
FLUSH PRIVILEGES;

En el master principal

Hay que editar el archivo my.ini (en windows) o my.conf (en linux).
En la sección marcada como
[mysqld] agregar lo siguiente.
log-bin = “D:\MySQL\MySQL Server 5.1\Logs” (cuidado con las comillas)
binlog-do-db=mibase
server-id=1

y agregar al final del archivo lo siguiente:
slave-net-timeout = 30
master-connect-retry = 30

Una vez hecho esto, grabamos y reiniciamos el servicio, ya sea por services o por línea de comandos:
mysqld restart

En el Master secundario:

Lo mismo, cambiar my.ini o my.conf, segun sea Windows o Linux y agregar lo siguiente en la sección: [mysqld]

log-bin = “c:\program files\mysql\logs\” (cuidado con las comillas)
binlog-do-db=winnings
server-id=2 (fijarse que este número es distinto al del master principal)

y al final del archivo agregar:
slave-net-timeout = 30
master-connect-retry = 30

grabar el archivo y reiniciar el servicio mysql

mysqld restart

En el Master principal:

Para evitar problemas vamos a bloquear las tablas hasta que finalicemos la operatoria.

FLUSH TABLES WITH READ LOCK;

En el Master secundario:

Creamos la base a ser replicada:
mysql -u root -pSuPassword

CREATE DATABASE suBase;

mysql -u root -pSuPassword suBase < suBase_backup.sql

En el Master principal:

mysql -u root -pSuPassword

use SuBase
go
SHOW MASTER STATUS;

Esto nos mostrará algo asi
PLAIN TEXT
CODE:
+---------------------+----------+-------------------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+-------------------------------+------------------+
| mysql-bin.000001 | 21197930 | my_database,my_database | |
+---------------------+----------+----------------------------

Lo que nos interesa a nosotros es el dato del file (mysql-bin.000001) y el número de la posición (21197930) . Con esos datos nos vamos al master secundario.

En el master secundario:
mysql -u root -pSuPassword

stop slave;
CHANGE MASTER TO MASTER_HOST='10.33.0.14', MASTER_USER='usuario', MASTER_PASSWORD='pepe’, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=21197930;
start slave;

Fijense que en los parametros master_log_file y master_log_pos pusimos los datos que guardamos en el paso anterior en el master principal. En master user pusimos el usuario que creamos originalmente para la replicación y en Master_password su correspondiente password.

A continuación ejecutamos lo siguiente para ver como está funcionando la replicación:

Show Slave Status;

A este punto ya tendríamos seteada la replicación desde el master principal al master secundario, pero nos faltaría hacer la inversa, replicación desde el secundario al principal, por lo tanto...
Vamos al Master secundario.
use SuBase
go
SHOW MASTER STATUS;
Lo mismo que antes, tomamos los valores de file y position y los llevamos ahora al master principal.

En el master principal
mysql -u root -pSuPassword

stop slave;
CHANGE MASTER TO MASTER_HOST='10.33.0.13', MASTER_USER='usuarios', MASTER_PASSWORD='pepe’, MASTER_LOG_FILE='Logs.000001', MASTER_LOG_POS=107;
start slave;

Y como habiamos bloqueado las tablas para replicar sin problemas ahora es el momento de desbloquearlas:

unlock tables;

Si se siguieron todos los pasos, en este momento la replicación debería estar funcionando.

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea















Read More...