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.
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
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
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
Una vez completado, reinicie la aplicación MySQL:
sudo service mysql restart
Inicie su sesión MySQL en cada uno de sus servidores:
mysql -u root -p
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';
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.
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)
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 masterlogpos
con 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;
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;
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;
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!
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.