A veces, es posible que necesitemos replicar datos de un servidor de base de datos MySQL a uno o más servidores de base de datos MySQL automáticamente. Básicamente, los administradores de la base de datos realizan tareas relacionadas con la base de datos, como la replicación, la agrupación en clústeres y la conmutación por error automática. Administrar servidores de bases de datos MySQL y realizar tareas de replicación son responsabilidades de los expertos en bases de datos. En este artículo, aprenderemos cómo configurar la replicación de la base de datos MySQL maestro-esclavo en Ubuntu 20.04. En este artículo, usaremos MySQL 8 para la replicación.
Requisitos
- Dos servidores ubuntu
- Cuenta de usuario root con privilegios
- Conexión a Internet para descargar paquetes
En este ejemplo, se utilizan los siguientes servidores.
- Maestro:192.168.178.135
- Esclavo:192.168.178.137
Instalar servidor MySQL 8 en ambos nodos
La instalación de MySQL es un proceso simple y directo. En el sistema Ubuntu, MySQL se puede instalar usando el repositorio de paquetes APT. Antes de la instalación, actualice el índice de paquetes de Ubuntu con el siguiente comando.
$apt update
Instale el paquete del servidor MySQL usando el siguiente comando.
$apt install mysql-server -y
La instalación nueva del servidor MySQL lo deja sin seguridad. Ejecute el script “mysql_secure_installation ” para cambiar algunas de las opciones predeterminadas menos seguras, como inicios de sesión raíz remotos, base de datos de prueba, usuarios de muestra, etc.
$ mysql_secure_installation
Inicie y habilite el servicio MySQL
$ systemctl start mysql
$ systemctl enable mysql
Configurar el servidor maestro de la base de datos
Ahora necesitamos hacer algunos cambios en el servidor maestro para la replicación. Edite el mysqld.conf archivo en el directorio /etc/mysql/mysql.conf.d y agregue las siguientes líneas. Recuerde agregar las variables de configuración debajo de [mysqld] sección.
$ vi /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log server-id = 1 log-bin = /var/log/mysql/mysql-bin.log tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log=1 slow_query_log_file=/var/lib/mysql/mysqld-slow.log
donde:
- server-id:ID único del servidor MySQL. Este ID no se puede reutilizar en ningún nodo del clúster.
- log-bin:este es el archivo en el que se almacena toda la información de replicación.
- max_binlog_size:tamaño del archivo binlog.
Además, comente la dirección de enlace como:
#bind-address =127.0.0.1
Reinicie el servicio mysql
$systemctl restart mysql
Cree un nuevo usuario para el servicio de replicación en el nodo principal
Ahora necesitamos crear un usuario de base de datos en un nodo maestro que será utilizado por los esclavos cuando se conecten. Inicie sesión en la base de datos con el usuario raíz y cree el usuario.
$ mysql -u root -p
$ mysql> CREATE USER [email protected] IDENTIFIED BY '[email protected]';
Nota:Especificar la dirección IP al crear el usuario aceptará conexiones MySQL solo desde el host especificado. Se rechazarán las conexiones de otros hosts. En este ejemplo, he usado la dirección IP de mi servidor esclavo MySQL. Es posible que deba cambiar esta dirección IP a su entorno en consecuencia.
El usuario necesita privilegios de ESCLAVO DE REPLICACIÓN para poder replicar los datos de MySQL. Use la siguiente consulta para otorgar los privilegios.
mysql> GRANT REPLICATION SLAVE on *.* to [email protected] ;
Verifique los privilegios otorgados mediante la siguiente consulta.
mysql> SHOW GRANTS FOR [email protected];
Configurar el nodo DB esclavo
Ya hemos instalado el servidor MySQL en el paso anterior. Ahora cambiaremos algunos archivos de configuración para habilitar el proceso de replicación. Edite el mysqld.conf archivo bajo /etc/mysql/mysql.conf.d directorio y agregue los siguientes contenidos.
$vi /etc/mysql/mysql.conf.d/mysqld.conf
Contenido del archivo de configuración:
[mysqld] log_bin = /var/log/mysql/mysql-bin.log server-id = 2 read_only = 1 tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log = 2
donde,
- id-servidor – ID de servidor MySQL único.
- solo lectura – El nodo esclavo está configurado en modo de solo lectura
- registro_bin – Habilita el registro binario en el nodo esclavo
- slow_query_log – Habilita el registro de consultas lentas
Además, comente la línea de dirección de enlace.
# bind-address = 127.0.0.1
Ahora reinicie el servicio MySQL
$ systemctl restart mysql
Conectar el servidor esclavo al servidor maestro
Antes de configurar el servidor esclavo, vaya al servidor maestro y verifique el estado.
$ mysql -u root -p
mysql> SHOW MASTER STATUS\G
Tome nota de las siguientes banderas que usaremos en el servidor esclavo.
- Archivo:mysql-bin.000002
- Posición:156
Ahora configure los parámetros en el servidor esclavo que se usarán para conectar el servidor maestro. Siga los pasos a continuación.
- Inicie sesión en el servidor MySQL usando credenciales de root
$ mysql -u root -p
- Detener subprocesos esclavos
mysql> STOP SLAVE;
- Configure el servidor esclavo para replicar el servidor maestro
mysql> CHANGE MASTER TO MASTER_HOST='192.168.178.137', MASTER_USER='replication_user', MASTER_PASSWORD='[email protected]', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1050;
donde,
192.168.178.137 – Dirección IP del servidor maestro- usuario_de_replicación – Usuario de MySQL del servidor maestro
- contraseña – Contraseña de usuario de replicación
- mysql-bin.000002 – Archivo de registro del servidor maestro
156 – Posición de registro del servidor maestro
Ahora activa el servidor esclavo.
mysql> START SLAVE;
Verifique el estado del esclavo utilizando la siguiente consulta
mysql> SHOW SLAVE STATUS\G
Tenga en cuenta el estado de la siguiente bandera.
- Slave_IO_Running:Conectando
- Slave_IO_Running:Conectando
Verificar replicación maestro-esclavo
El maestro y el esclavo están configurados para replicar. Podemos verificar si la replicación maestro-esclavo está funcionando o no. En el servidor maestro, inicie sesión en MySQL shell y cree una base de datos de prueba.
$ mysql -u root -p
mysql> CREATE DATABASE example_db;
Verifique la base de datos creada.
mysql> SHOW DATABASES;
Ahora inicia sesión en el servidor esclavo
$ mysql -u root -p
Ejecute la siguiente consulta para enumerar las bases de datos.
mysql> SHOW DATABASES;
Puede ver que la base de datos creada en el servidor maestro se replica en el servidor esclavo.
Conclusión
En este artículo, aprendimos cómo configurar el nodo maestro y esclavo de MySQL en Ubuntu 20.04. También puede seguir este artículo para configurar la replicación de MySQL maestro-esclavo en Ubunutu 18.04.