La replicación de MySQL es un proceso que le permite mantener fácilmente múltiples copias de los datos de MySQL al copiarlos automáticamente de una base de datos maestra a una base de datos esclava. Esto puede ser útil por muchas razones, incluida la configuración de una copia de seguridad de los datos, una forma de analizarlos sin usar la base de datos principal, o simplemente como un medio para escalar.
Este tutorial cubrirá un ejemplo muy simple de la replicación de mysql: un maestro enviará información a un solo esclavo. Para que el proceso funcione, necesitará dos direcciones IP: una del servidor maestro y una del esclavo.
Este tutorial utilizará las siguientes direcciones IP:
12.34.56.789- Base de datos maestra 172.16.4.16 ip para la prueba
12.23.34.456- Base de datos de esclavos 172.16.4.42 ip para la prueba
Configuración
En este artículo se supone que tiene un usuario con privilegios de sudo y tiene instalado MySQL. Si no tiene mysql, puede instalarlo con este comando:
|
sudo apt-get install mysql-server mysql-client |
Paso uno: configurar la base de datos maestra
Abra el archivo de configuración de mysql en el servidor maestro.
|
sudo nano /etc/mysql/my.cnf |
o
|
nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Una vez dentro de ese archivo, necesitamos hacer algunos cambios.
El primer paso es encontrar la sección que se ve así, vinculando el servidor al host local:
bind-address = 127.0.0.1
Reemplace la dirección IP estándar con la dirección IP del servidor.
bind-address = 12.34.56.789
El siguiente cambio de configuración se refiere a la ID del servidor, ubicada en la sección [mysqld]. Puede elegir cualquier número para este punto (puede ser más fácil comenzar con 1), pero el número debe ser único y no puede coincidir con ningún otro ID de servidor en su grupo de replicación. Voy a seguir adelante y llamaré a éste 1.
Asegúrate de que esta línea no tenga comentarios.
server-id = 1
Pasa a la línea log_bin. Aquí es donde se guardan los detalles reales de la replicación. El esclavo va a copiar todos los cambios que están registrados en el registro. Para este paso, simplemente necesitamos descomentar la línea que hace referencia a log_bin:
log_bin = /var/log/mysql/mysql-bin.log
Finalmente, debemos designar la base de datos que se replicará en el servidor esclavo. Puede
incluir más de una base de datos repitiendo esta línea para todas las bases de datos que necesitará.
binlog_do_db = newdatabase
Después de realizar todos los cambios, siga adelante, guarde y salga del archivo de configuración.
Actualizar MySQL.
|
sudo service mysql restart |
Los próximos pasos se llevarán a cabo en el shell de MySQL, en sí.
Abre el shell de MySQL.
|
mysql -h localhost -u root -p |
Necesitamos otorgar privilegios al esclavo. Puedes usar esta línea para nombrar a tu esclavo y configurar su contraseña. El comando debe estar en este formato:
|
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; |
La siguiente parte es un poco meticulosa. Para llevar a cabo la tarea, deberá abrir una nueva ventana o pestaña, además de la que ya está usando unos pocos pasos en la línea
En su pestaña actual, cambie a «newdatabase».
USE newdatabase;
A continuación, bloquee la base de datos para evitar nuevos cambios:
|
FLUSH TABLES WITH READ LOCK; |
Luego escribe:
Verás una tabla que debería verse así:
|
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | newdatabase | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
Esta es la posición desde la cual la base de datos esclava comenzará a replicarse. Anota estos números, te serán útiles más adelante.
Si realiza cambios nuevos en la misma ventana, la base de datos se desbloqueará automáticamente. Por este motivo, debe abrir la nueva pestaña o ventana y continuar con los siguientes pasos allí.
Continuando con la base de datos aún bloqueada, exporte su base de datos usando mysqldump en la nueva ventana (asegúrese de escribir este comando en el shell bash, no en MySQL).
|
mysqldump -u root -p --opt newdatabase > newdatabase.sql |
Ahora, volviendo a su ventana original, desbloquee las bases de datos (haciéndolas que se puedan escribir nuevamente). Terminar saliendo de la shell.
UNLOCK TABLES;
QUIT;
Ahora que ha terminado con la configuración de la base de datos maestra.
Paso dos: configurar la base de datos de esclavos
Una vez que haya configurado la base de datos maestra. Puede dejarlo de lado por un tiempo, y ahora comenzaremos a configurar la base de datos esclava.
Inicie sesión en su servidor esclavo, abra el shell de MySQL y cree la nueva base de datos que replicará desde el maestro (luego salga):
CREATE DATABASE newdatabase;
EXIT;
Importe la base de datos que exportó previamente desde la base de datos maestra.
mysql -u root -p newdatabase < /path/to/newdatabase.sql
Ahora necesitamos configurar el esclavo de la misma manera que hicimos el maestro:
|
sudo nano /etc/mysql/my.cnf |
Tenemos que asegurarnos de que tenemos algunas cosas configuradas. El primero es el servidor-id. Este número, como se mencionó anteriormente, debe ser único. Ya que está configurado en el valor predeterminado (aún 1), asegúrese de cambiarlo, es algo diferente.
server-id = 2
Después de eso, asegúrese de que tiene los siguientes tres criterios debidamente llenados:
|
relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Deberá agregar en la línea relay-log: no está ahí por defecto. Una vez que haya realizado todos los cambios necesarios, guarde y salga del archivo de configuración esclavo.
Reinicie MySQL una vez más:
|
sudo service mysql restart |
El siguiente paso es habilitar la replicación desde el shell de MySQL.
Abra el shell de MySQL una vez más y escriba los siguientes detalles, reemplazando los valores para que coincidan con su información:
|
CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; CHANGE MASTER TO MASTER_HOST='172.16.4.16',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS= 1371698; |
Este comando logra varias cosas al mismo tiempo:
Designa el servidor actual como el esclavo de nuestro servidor maestro.
Proporciona al servidor las credenciales de inicio de sesión correctas.
Por último, le permite al servidor esclavo saber desde dónde comenzar a replicar; El archivo de registro maestro y la posición del registro provienen de los números que anotamos anteriormente.
Con eso, has configurado un servidor maestro y esclavo.
Activar el servidor esclavo:
Puede ver los detalles de la replicación de esclavos escribiendo este comando. El “\G” reorganiza el texto para que sea más legible.
Si hay un problema en la conexión, puedes intentar iniciar esclavo con un comando para omitirlo:
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START; |
Todo listo
|
mysql> STOP SLAVE; En caso de un error en el slave, por id iguales, me paso porque la MV slave era una copia de MV master: $ sudo service mysql stop $ sudo mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak $ sudo service mysql start |