# Guía Completa para Configurar un Servidor MySQL Maestro-Esclavo en Debian 12

- Link: https://binariocero.com/mysql/guia-completa-para-configurar-un-servidor-mysql-maestro-esclavo-en-debian-12
- Published: 2024-11-08T11:30:37+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Configurar un sistema de replicación maestro-esclavo en MySQL 8 en Debian 12 es 
un proceso útil para asegurar la redundancia y distribución de datos. Este tipo 
de configuración replica datos de un servidor maestro a uno o más servidores esclavos.
Aquí tienes una guía completa sobre cómo llevar a cabo este proceso.

### Requisitos previos

 1. **Dos servidores Debian 12**: uno será el **maestro** y el otro el **esclavo**.
 2. **MySQL 8** instalado en ambos servidores.
 3. **Usuario con privilegios de root** en ambos servidores.
 4. **Redes y Firewalls** configurados para permitir el tráfico entre los dos servidores
    en el puerto MySQL (por defecto, 3306).

### Paso 1: Instalar MySQL 8 en ambos servidores

Si MySQL 8 no está instalado, sigue estos pasos para instalarlo en ambos servidores:

    ```wp-block-preformatted
    sudo apt updatesudo apt install mysql-server
    ```

Después de la instalación, verifica la versión para confirmar:

    ```wp-block-preformatted
    mysql --version
    ```

### Paso 2: Configurar el servidor maestro

 1. **Editar la configuración de MySQL** en el servidor maestro:
    Abre el archivo de
    configuración de MySQL:`sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf `Agrega o 
    modifica los siguientes parámetros bajo la sección `[mysqld]`:`server-id = 1 # 
    Identificador único del servidor maestro ``log_bin = /var/log/mysql/mysql-bin.log#
    Habilita el log binario para la replicación `Guarda y cierra el archivo.
 2. **Reiniciar MySQL** para aplicar los cambios:
    `sudo systemctl restart mysql`
 3. **Crear un usuario de replicación**:
    En el servidor maestro, abre el cliente de
    MySQL:`sudo mysql -u root -p `Ejecuta el siguiente comando para crear un usuario
    de replicación y concederle permisos:`CREATE USER 'replicator'@'%' IDENTIFIED BY'
    password_replicacion'; ``GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; ``
    FLUSH PRIVILEGES;`
 4. **Bloquear las tablas** para obtener una instantánea de la base de datos:
    `FLUSH
    TABLES WITH READ LOCK;`
 5. **Obtener el estado de replicación del maestro**:
    Ejecuta el siguiente comando 
    para obtener la información necesaria para configurar el servidor esclavo (toma
    nota de `File` y `Position`):`SHOW MASTER STATUS; `Mantén esta sesión abierta para
    que el bloqueo de tablas siga activo hasta completar la copia de seguridad.
 6. **Hacer una copia de seguridad** de la base de datos:
    En otra terminal, exporta
    las bases de datos que deseas replicar:`mysqldump -u root -p --all-databases --
    master-data > /home/usuario/backup_maestro.sql`
 7. **Desbloquear las tablas** en la primera sesión de MySQL:
    `UNLOCK TABLES;`

### Paso 3: Configurar el servidor esclavo

 1. **Transferir el archivo de copia de seguridad** desde el servidor maestro al servidor
    esclavo:
    `scp usuario@maestro:/home/usuario/backup_maestro.sql /home/usuario/`
 2. **Restaurar la copia de seguridad** en el servidor esclavo:
    `mysql -u root -p </
    home/usuario/backup_maestro.sql`
 3. **Editar la configuración de MySQL** en el servidor esclavo:
    Abre el archivo de
    configuración de MySQL en el esclavo:`sudo nano /etc/mysql/mysql.conf.d/mysqld.
    cnf `Modifica o agrega los siguientes parámetros:`server-id = 2 # Identificador
    único del servidor esclavo ``relay_log = /var/log/mysql/mysql-relay-bin.log # Habilita
    el log de relé para la replicación `Guarda y cierra el archivo.
 4. **Reiniciar MySQL** en el servidor esclavo:
    `sudo systemctl restart mysql`
 5. **Configurar la conexión de replicación en el esclavo**:
    En el servidor esclavo,
    abre el cliente de MySQL:`sudo mysql -u root -p `Ejecuta el siguiente comando, 
    reemplazando los valores con los detalles obtenidos del servidor maestro:`CHANGE
    MASTER TO ``MASTER_HOST='IP_DEL_MAESTRO', MASTER_USER='replicator', MASTER_PASSWORD
    ='password_replicacion', MASTER_LOG_FILE='nombre_del_log_binario', # Obtenido de
    SHOW MASTER STATUS en el maestro MASTER_LOG_POS=posición; # Obtenido de SHOW MASTER
    STATUS en el maestro`
 6. **Iniciar la replicación** en el servidor esclavo:
    `START SLAVE;`
 7. **Verificar el estado de la replicación**:
    Ejecuta el siguiente comando para verificar
    que la replicación esté funcionando correctamente:`SHOW SLAVE STATUS\G `Asegúrate
    de que los valores `Slave_IO_State` y `Slave_SQL_Running` estén en `Yes`. Esto 
    indica que el esclavo está conectado y replicando correctamente.

### Paso 4: Probar la replicación

 1. En el **servidor maestro**, crea una base de datos o tabla de prueba:
    `CREATE DATABASE
    prueba_replicacion;`
 2. En el **servidor esclavo**, verifica que la nueva base de datos o tabla esté replicada
    automáticamente.
    `SHOW DATABASES; `La base de datos `prueba_replicacion` debería
    aparecer.

### Paso 5: Configuraciones adicionales y optimización (Opcional)

 * **Monitoreo**: Implementa monitoreo para recibir alertas en caso de fallos de
   replicación.
 * **Automatización**: Usa herramientas de administración de MySQL, como `MySQL 
   Workbench` o `phpMyAdmin`, para gestionar la replicación.
 * **Seguridad**: Configura un firewall para restringir el acceso al puerto 3306
   desde servidores no autorizados.

Con estos pasos, habrás configurado exitosamente un sistema de replicación maestro-
esclavo en MySQL 8 en Debian 12.
