Configuración de una Replicación Master-Master en MySQL

Configuración de una Replicación Master-Master en MySQL

Written by Felipe Bravo
Last update: Wednesday, Oct 14, 2020

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 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

  1. Edite el archivo de configuración /etc/mysql/my.cnf. Agregue o modifique los siguiente valores:
    Servidor 1:
    Extracto del archivo: /etc/mysql/my.cnf

     serverid           = 1
     logbin             = /var/log/mysql/mysql-bin.log
     logbinindex       = /var/log/mysql/mysql-bin.log.index
     relaylog           = /var/log/mysql/mysql-relay-bin
     relaylogindex     = /var/log/mysql/mysql-relay-bin.index
     expirelogsdays    = 10
     maxbinlogsize     = 100M
     logslave_updates   = 1
     auto-increment-increment = 2
     auto-increment-offset = 1
    

Servidor 2:
Extracto del archivo: /etc/mysql/my.cnf

	serverid           = 2
	logbin             = /var/log/mysql/mysql-bin.log
	logbinindex       = /var/log/mysql/mysql-bin.log.index
	relaylog           = /var/log/mysql/mysql-relay-bin
	relaylogindex     = /var/log/mysql/mysql-relay-bin.index
	expirelogsdays    = 10
	maxbinlogsize     = 100M
	logslave_updates   = 1
	auto-increment-increment = 2
	auto-increment-offset = 2
  1. 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.cnf

     bind-address    = 123.45.67.8
    
  2. Una vez completado, reinicie la aplicación MySQL:

     sudo service mysql restart
    

Crear usuarios para la replicación

  1. Inicie su sesión MySQL en cada uno de sus servidores:

     mysql -u root -p
    
  2. Configure los usuarios de replicación en cada hosting. Remplace 123.45.67.8 con la dirección IP privada del servidor opuesto, y SuContraseña con una contraseña apropiada y segura:

     GRANT REPLICATION SLAVE ON . TO 'replication'@'123.45.67.8' IDENTIFIED BY 'SuContraseña';
    
  3. Ejecute el siguiente comando para probar la configuración. Use la dirección IP privada del hosting 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

  1. 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 y position que se muestran:

	mysql> SHOW MASTER STATUS;
	+------------------+----------+--------------+------------------+
	| File             | Position | BinlogDoDB | BinlogIgnoreDB |
	+------------------+----------+--------------+------------------+
	| mysql-bin.000001 |      277 |              |                  |
	+------------------+----------+--------------+------------------+
	1 row in set (0.00 sec)
  1. En el segundo servidor, desde la línea de comandos de MySQL, establezca la función de esclavo (slave) para esa base de datos. Remplace 123.45.67.9 con la dirección IP privada del primer servidor. También remplace el valor de masterlogfile con el nombre del archivo (file) del paso anterior, y el valor masterlogposcon el valor de posición (position) en el paso anterior:

     SLAVE STOP;
     CHANGE MASTER TO masterhost='123.45.67.9', masterport=3306, masteruser='replication', masterpassword='SuContraseña', masterlogfile='mysql-bin.000001', masterlogpos=106;
     SLAVE START;
    
  2. En el Servidor 2, solicite el estatus del maestro o master. Una vez más, tome nota de los valores file y position:

     SHOW MASTER STATUS;
    
  3. 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 masterhost='123.45.67.8', masterport=3306, masteruser='replication', masterpassword='SuContraseña', masterlogfile='mysql-bin.000001', masterlogpos=277;
     SLAVE START;
    
  4. 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.

Base de datos

15 articles in this category.
Written by Felipe Bravo.