Configuración de una replicación Master-Master en MySQL
Actualizado el 13 de septiembre, 2016. Por BlueHosting.
Una replicación Master-Master en MySQL agrega velocidad y redundancia en sitios web activos. Con una replicación, dos servidores MySQL actúan como un cluster. La técnica de agrupamiento o clustering es particularmente útil para sitios web que requieren alta disponibilidad. Use dos servidores BlueHosting separados, cada uno con direcciones IPv4 privadas, para configurar una réplica.
Esta guía está escrita para un usuario no root. Los comandos que requieren privilegios elevados están precedidos por sudo
. Puede obviar el uso de este prefijo si inició sesión como root.
Tenga en cuenta que esta guía está escrita para Debian 7 o Ubuntu 14.04, los comandos para su distribución podrían cambiar.
Instalar MySQL
Use los siguientes comandos para instalar MySQL en cada uno de sus servidores:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install mysql-server mysql-client
Editar la configuración de MySQL
-
Edite el archivo de configuración
/etc/mysql/my.cnf
. Agregue o modifique los siguiente valores:
Servidor 1:
Extracto del archivo: /etc/mysql/my.cnfserver_id = 1 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_slave_updates = 1 auto-increment-increment = 2 auto-increment-offset = 1
Servidor 2:
Extracto del archivo: /etc/mysql/my.cnfserver_id = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_slave_updates = 1 auto-increment-increment = 2 auto-increment-offset = 2
-
Para cada uno de los servidores, edite la configuración del archivo
bind-address
con el fin de usar las direcciones IP privadas:
Extracto del archivo: /etc/mysql/my.cnfbind-address = 123.45.67.8
-
Una vez completado, reinicie la aplicación MySQL:
sudo service mysql restart
Crear usuarios para la replicación
-
Inicie su sesión MySQL en cada uno de sus servidores:
mysql -u root -p
-
Configure los usuarios de replicación en cada BlueHosting. Remplace
123.45.67.8
con la dirección IP privada del servidor opuesto, ySuContraseña
con una contraseña apropiada y segura:GRANT REPLICATION SLAVE ON *.* TO 'replication'@'123.45.67.8' IDENTIFIED BY 'SuContraseña';
-
Ejecute el siguiente comando para probar la configuración. Use la dirección IP privada del BlueHosting opuesto:
mysql -ureplication -p -h 123.45.67.8 -P 3306
Este último comando debería conectarlo con la instancia de MySQL en el otro servidor remoto.
Configurar una replicación de la base de datos
-
Con su sesión MySQL iniciada en el primer servidor, haga una petición sobre el estatus del maestro o master:
SHOW MASTER STATUS;
Note los valores
file
yposition
que se muestran:mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
En el segundo servidor, desde la línea de comandos de MySQL, establezca la función de esclavo (
slave
) para esa base de datos. Remplace123.45.67.9
con la dirección IP privada del primer servidor. También remplace el valor demaster_log_file
con el nombre del archivo (file
) del paso anterior, y el valormaster_log_pos
con el valor de posición (position
) en el paso anterior:SLAVE STOP; CHANGE MASTER TO master_host='123.45.67.9', master_port=3306, master_user='replication', master_password='SuContraseña', master_log_file='mysql-bin.000001', master_log_pos=106; SLAVE START;
-
En el Servidor 2, solicite el estatus del maestro o master. Una vez más, tome nota de los valores
file
yposition
:SHOW MASTER STATUS;
-
Establezca el estatus de base de datos esclava en el Servidor 1, remplazando los mismos valores del paso 2 con los del Servidor 2.
SLAVE STOP; CHANGE MASTER TO master_host='123.45.67.8', master_port=3306, master_user='replication', master_password='SuContraseña', master_log_file='mysql-bin.000001', master_log_pos=277; SLAVE START;
-
Pruebe creando una base de datos e insertando una fila:
Servidor 1:create database test; create table test.flowers (`id` varchar(10));
Servidor 2:
show tables in test;
Cuando haga la petición o query, debería ver las tablas del servidor 1 replicadas en el segundo servidor. ¡Felicidades, ahora tiene un cluster Master-Master para sus bases de datos MySQL!
Recursos adicionales
Para complementar la información presentada en esta guía puede consultar los siguientes recursos. Aunque este material es provisto esperando que sea útil, tenga en cuenta que no podemos certificar su actualidad o precisión.