Cómo configurar la replicación MySQL Master-Slave

Cómo configurar la replicación MySQL Master-Slave

La replicación de MySQL es un proceso en el que un servidor maestro replica sus datos a uno o más servidores de esclavos. Esto puede proporcionar varios beneficios, como una mayor disponibilidad de datos, un rendimiento mejorado y copias de seguridad más fáciles. Un aspecto importante de la replicación es la seguridad, y en este artículo, exploraremos cómo configurar la replicación MySQL Master-Slave con autenticación utilizando certificados SSL.

Al usar los certificados SSL, podemos asegurarnos de que los datos que se replicen sean seguros y solo pueden acceder a las partes autorizadas. Además, los certificados SSL también se pueden usar para autenticar los servidores maestros y esclavos, proporcionando una capa adicional de seguridad.

En este artículo, pasaremos por el proceso de configuración de una configuración de replicación maestra con esclavo con certificados SSL, incluida la creación e instalación de los certificados, la configuración de los servidores maestros y esclavos, y la solución de problemas comunes.

Beneficios de replicación de MySQL

Los principales beneficios de la replicación MySQL Master-Slave son:

  • Actuación: Uno de los principales beneficios es que permite la descarga de consultas de solo lectura de la base de datos maestra a los esclavos, mejorando el rendimiento y la escalabilidad del sistema de la base de datos. Esto se debe a que la base de datos maestra solo es responsable de manejar transacciones escritas, mientras que los esclavos pueden manejar las transacciones de lectura.
  • Redundancia y tolerancia a fallas: Otro beneficio de la replicación MySQL Master-Slave es que proporciona un nivel de redundancia y tolerancia a fallas. Si la base de datos maestra cae, los esclavos pueden continuar cumpliendo solicitudes de lectura, minimizando el tiempo de inactividad. Además, si una base de datos de esclavos cae, se puede reemplazar con un nuevo esclavo, y los datos se pueden volver a sincronizar del maestro.
  • Copia de seguridad y recuperación: La replicación MySQL Master-Slave también se puede utilizar para copias de seguridad y recuperación de datos. Al tomar copias de seguridad de los esclavos, puede tener una copia de los datos que se pueden usar en caso de un desastre en la base de datos maestra.

Este artículo lo ayudará a configurar la replicación maestra-esclavo entre dos servidores MySQL. Este tutorial se prueba en Ubuntu 22.04 instancia de Linux con mysql 8.0 servidor de bases de datos.

Detalles de configuración:

Para el propósito de prueba, he creado dos sistemas en mi red local. Ambos sistemas tienen una IP diferente de la misma red. Suponiendo que los servidores de base de datos maestros y esclavos tienen los IP de abajo como a continuación:

Servidor maestro: 11.11.11.11 Servidor de esclavos: 22.22.22.22 

Si está utilizando diferentes versiones diferentes de MySQL en maestro y esclavo, use este enlace para verificar la compatibilidad.

Paso 1: Crear certificados SSL [maestro]

Primero, debe generar un certificado de CA. Una autoridad de certificado (CA) es una organización de terceros de confianza que emite certificados digitales utilizados para verificar la identidad y la autenticidad de una entidad. Luego podemos generar certificado digital para el sistema maestro y cliente firmado por el certificado de CA.

  1. Cree un directorio para almacenar los nuevos certificados SSL.
    mkdir/etc/mysql/certs  CD/etc/mysql/certs  
  2. Ahora, genere el certificado para usar como autoridad de certificado.
    OpenSSL Genrsa 4096> CA-Key.pem  OpenSSL req -new -x509 -nodes -days 9999 -Key CA -Key.PEM> CA-CERT.pem  
  3. Genere el certificado para el servidor maestro MySQL:
    OpenSSL Req -Newkey RSA: 4096 -Days 9999 -Nodes -KeyOut Server -Key.PEM> Server-Req.pem  OpenSSL x509 -Req -in Server -Req.PEM -Days 9999 -CA CA -CERT.PEM -Ca -Key.PEM -SET_SERIAL 01> Servidor -Cert.pem  
  4. Luego genere el certificado para el sistema del cliente (esclavo).
    OpenSSL Req -NewKey RSA: 4096 -Days 9999 -Nodes -KeyOut Client -Key.PEM> Cliente-Req.pem  OpenSSL x509 -Req -in Client -REQ.PEM -Days 9999 -CA CA -CERT.PEM -Ca -Key.PEM -set_Serial 01> Cert de clientes.pem  

Nota IMPORTANTE: Asegúrese de usar una diferente "Nombre común (FQDN)" Para los archivos CA que los archivos de certificado maestro y cliente.

Paso 2: Actualizar el archivo de configuración MySQL [maestro]

A continuación, el archivo de configuración de MySQL (por ejemplo,/etc/mysql/mysql.confusión.d/mysqld.cnf) y agregar/actualizar las siguientes entradas:

[mysqld] servidor-id = 1 binlog-format = mixed log-bin = mysql-bin innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 ssl ssl-ca =/etc/mysql/certs/ca-cert.PEM SSL-CERT =/ETC/MYSQL/CERTS/SERVER-CERT.Pem ssl-key =/etc/mysql/certs/servidor-key.pem
1234567891011[mysqld] server-id = 1binlog-format = mixedlog-bin = mysql-bininnodb_flush_log_at_trx_commit = 1sync_binlog = 1 sslssl-ca =/etc/mysql/certs/ca-cert.pemssl-cert =/etc/mysql/certs/server-cert.Pemssl-key =/etc/mysql/certs/servidor-key.pem

Paso 3: Crear usuario de replicación [maestro]

En este paso, crearemos un nuevo usuario en el servidor MySQL que se utilizará para autenticar a los clientes con el servicio maestro. Por lo tanto, inicie sesión en el servidor MySQL en el servidor de base de datos maestro con el usuario privilegiado root. Luego cree un nuevo usuario, que se utilizará para el proceso de replicación.

Conéctese al servidor MySQL, luego ejecute y ejecute las siguientes consultas para crear un nuevo usuario y otorgarlos al acceso de esclavos.

mySQL> Crear usuario 'replicación'@'22.22.22.22 'Identificado por' AsECurePA $$ W0RD 'requiere SSL; MySQL> Said Replication Slave en *.* A 'replicación'@'22.22.22.22 '; MySQL> privilegios de descarga;
123mySQL> Crear usuario 'replicación'@'22.22.22.22 'Identificado por' AseCurePa $$ W0rd 'requiere SSL; MySQL> Said Replication Slave en *.* A 'replicación'@'22.22.22.22 '; MySql> privilegios de descarga;

Asegúrese de reemplazar '22.22.22.22 'con la dirección IP de la instancia de esclavos.

Asegúrese de usar una contraseña segura para la cuenta de usuario.

Paso 4: bases de datos de volcado [maestro]

Ahora, exporte todas las bases de datos en la instancia maestra utilizando el 'mysqldump' utilidad.

mysqldump -uerot -p--skip-lock-tablas--single-transaction \--flush-logs --hex-blob --master-data = 2 -a | gzip -c> vertido.sql.GZ  

Copie el archivo de volcado en el servidor de esclavos.

volcado.sql.GZ [correo electrónico protegido]:  

El comando solicitará la contraseña de usuario remoto. Una vez que el usuario sea autenticación, el archivo se copiará al servidor remoto en el directorio de inicio de la cuenta 'root'.

Paso 5: Copiar archivos de certificados SSL [maestro]

Copie la clave del cliente y los archivos de certificado de certificado y CA a la instancia de esclavo. Asegúrese de que el "/etc/mysql/certs" El directorio existe un sistema remoto.

SCP/etc/mysql/certs/ca-cert.PEM [correo electrónico protegido]:/etc/mysql/certs/  SCP/etc/mysql/certs/cliente-cert.PEM [correo electrónico protegido]:/etc/mysql/certs/  SCP/etc/mysql/certs/client-key.PEM [correo electrónico protegido]:/etc/mysql/certs/  

Nota: Configure las teclas SSH para inicio de sesión automático o use contraseñas para conectarse a remoto.

Paso 6: Restaurar copia de seguridad de la base de datos [esclavo]

Inicie sesión en el servidor de clientes de replicación mysql. Extraiga el archivo de volcado usando Gunzip Utility. Después de eso, restaurar la base de datos.

basurero.sql.GZ  mysql -uerot -p -f < dump.sql  

Luego verifique la posición del archivo de registro en el archivo de copia de seguridad.

basurero.SQL -N80 | Grep "Master_log_pos"  

La salida se verá así:

Salida-Cambie el maestro a maestro_log_file = "mysql-bin.000007 ", maestro_log_pos = 154; 

Nota la Maestro_log_file y Maestro_log_pos valores, que se utilizarán más adelante en este artículo.

Paso 7: Actualizar la configuración de esclavo MySQL [esclavo]:

A continuación, el archivo de configuración de MySQL (por ejemplo,/etc/mysql/mysql.confusión.d/mysqld.cnf) y agregar/actualizar las entradas de seguimiento:

[mysqld] servidor-id = 2 binlog-format = mixed log-bin = mysql-bin relay-log = mysql-relay-bin log-slave-updates = 1 lectura = 1
1234567[mysqld] server-id = 2binlog-format = mixedlog-bin = mysql-binrelay-log = mysql-relay-binlog-slave-updates = 1ad-only = 1

Paso 8: Inicie la replicación de esclavos [esclavo]

Configure la instancia esclava con la dirección IP de la instancia maestra junto con el usuario de replicación, su contraseña y el certificado copiado de la instancia maestra. Asegúrese de actualizar 'mysql-bin.###### ' y 'Master_log_pos = ###' Igual que obtenemos en el paso 6. Incluir todos los ceros.

mysql> cambiar maestro a maestro_host = "11.11.11.11 ", maestro_user = 'replication', maestro_password =" aseCurepa $$ w0rd ", maestro_ssl_ca ="/etc/mysql/certs/ca-cert.PEM ", Master_ssl_cert ="/etc/mysql/certs/client-cert.PEM ", Master_ssl_key ="/etc/mysql/certs/client-key.Pem ", maestro_ssl = 1, maestro_log_file =" mysql-bin.###### ", maestro_log_pos = ###;
12345678mysql> cambiar maestro a master_host = '11.11.11.11 ', master_user =' replication ', maestro_password =' ​​aseCurepa $$ w0rd ', maestro_ssl_ca ='/etc/mysql/certs/ca-cert.PEM ', Master_ssl_cert ='/etc/mysql/certs/client-cert.PEM ', Master_ssl_key ='/etc/mysql/certs/client-key.PEM ', Master_ssl = 1, maestro_log_file =' mysql-bin.###### ', maestro_log_pos = ###;

Finalmente inicie el proceso de replicación:

mysql> inicio esclavo;
1mysql> inicio esclavo;

Esto habilitará e iniciará el proceso de replicación.

Paso 9: Verificar la replicación

Puedes ejecutar el 'Mostrar el estado de esclavos' consulta para verificar el estado actual de la replicación:

mysql> mostrar el estado de esclavos \ g
1mysql> mostrar el estado de esclavos \ g
Salida ************************** 1. Row *****************************.11.11.11 Master_user: Replication Master_port: 3306 Connect_cretry: 60 Master_log_file: MySQL-Bin.000177 read_master_log_pos: 100443919 relay_log_file: mysql-relay-bin.000498 relay_log_pos: 104189538 relay_master_log_file: mysql-bin.000169 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 104189322 Relay_Log_Space: 972921462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql /certs/ca-cert.PEM Master_SSL_CA_PATH: Master_ssl_cert:/etc/mysql/certs/client-cert.PEM Master_SSL_CIPHER: Master_ssl_key:/etc/mysql/certs/client-key.PEM Seconds_Behind_Master: 13803 maestro_ssl_verify_server_cert: no last_io_errno: 0 last_io_error: last_sql_errno: 0 last_sql_error: replicate_ignore_server_ids: maestro_server_id: 1 maestro_uuid: a548db65-a007-1111.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Waiting for dependent transaction to commit Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row en set, 1 advertencia (0.00 seg) 

Verifique el valor de 'Seconds_Behind_Master'. El valor cero (0) significa que ambos sistemas se sincronizan por completo.
La replicación MySQL Master-Slave se ha configurado con éxito en su sistema y está en modo de trabajo. Gracias por usar este tutorial, por favor no olvide compartirlo con tus amigos.

Conclusión

En este artículo, hemos cubierto el proceso de configuración de la replicación MySQL Master-Slave con autenticación utilizando certificados SSL. Hemos pasado por los pasos de crear e instalar los certificados, configurar los servidores maestro y esclavos y solucionar problemas comunes. Mediante el uso de certificados SSL, hemos asegurado que los datos que se replican sean seguros y solo pueden acceder a las partes autorizadas. Además, los certificados SSL se han utilizado para autenticar los servidores maestros y esclavos, proporcionando una capa adicional de seguridad. Este enfoque puede ayudar a las organizaciones a mejorar la seguridad de su entorno de replicación y garantizar la integridad y confidencialidad de sus datos.

En general, la replicación MySQL Master-Slave es una herramienta útil para mejorar el rendimiento, la escalabilidad y la tolerancia a las fallas de un sistema de base de datos MySQL. Permite la distribución de datos en múltiples servidores y puede usarse para copias de seguridad y recuperación de datos.