10. Replicación de Bases de Datos MySQL
¿Qué es la replicación?
La replicación es un proceso mediante el cual los datos de una base de datos (llamada maestro o fuente) se copian automáticamente a una o más instancias secundarias (llamadas esclavos o réplicas). En MySQL, se utiliza principalmente para:
- Alta disponibilidad (si falla el maestro, se puede usar un esclavo).
- Balanceo de carga (lecturas desde esclavos, escrituras en maestro).
- Copias de seguridad sin afectar el rendimiento del servidor principal.
Ventajas y desventajas
Ventajas:
- Mejora la disponibilidad y tolerancia a fallos.
- Permite escalar horizontalmente las operaciones de lectura.
- Facilita el análisis de datos sin impactar al sistema productivo.
Desventajas:
- Replicación asíncrona: los esclavos pueden estar ligeramente desfasados (lag).
- Configuración compleja si hay fallos o inconsistencias.
- Requiere red estable y baja latencia para buen rendimiento.
Escenario implementado
- Maestro: Windows 10/11 con MySQL 8.0 instalado.
- Esclavo 1: Máquina virtual con Ubuntu Server 22.04 LTS + MySQL.
- Esclavo 2: Segunda VM con Ubuntu Server 22.04 LTS + MySQL.
- Todos los equipos en la misma red local (modo puente en VirtualBox).
- IPs de ejemplo:
- Maestro:
192.168.1.100 - Esclavo 1:
192.168.1.101 - Esclavo 2:
192.168.1.102
- Maestro:
1. Configuración del Maestro (Windows)
Paso 1: Editar my.ini (ubicado en C:\ProgramData\MySQL\MySQL Server 8.0\)
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=empresa ; Base de datos a replicar
bind-address=0.0.0.0 ; Permitir conexiones remotas
port=3306
Paso 2: Reiniciar el servicio MySQL desde Servicios de Windows.
Paso 3: Crear usuario de replicación
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'clave_segura_123';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
Paso 4: Obtener estado del binlog
SHOW MASTER STATUS;
Anote los valores de File (ej. mysql-bin.000002) y Position (ej. 157).
2. Configuración de los Esclavos (Ubuntu Server)
Paso 1: Instalar MySQL
sudo apt update
sudo apt install mysql-server
Paso 2: Editar /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=2 ; Para esclavo 1 (usa 3 para esclavo 2)
bind-address=0.0.0.0
port=3306
Paso 3: Reiniciar MySQL
sudo systemctl restart mysql
Paso 4: Configurar conexión al maestro
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='replica_user',
MASTER_PASSWORD='clave_segura_123',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=157;
Paso 5: Iniciar la replicación
START SLAVE;
Paso 6: Verificar estado
SHOW SLAVE STATUS\G
Verifique que Slave_IO_Running y Slave_SQL_Running estén en Yes, y que Seconds_Behind_Master sea 0 o bajo.
Repita los pasos para el Esclavo 2, cambiando server-id=3 y asegurándose de que tenga IP única.
3. Pruebas de replicación
1. En el maestro, ejecute:
USE empresa;
INSERT INTO empleados (nombre, cargo) VALUES ('Laura Torres', 'Analista');
2. En cada esclavo, ejecute:
USE empresa;
SELECT * FROM empleados;
El nuevo registro debe aparecer automáticamente.
Consideraciones adicionales
- Asegúrese de que el firewall de Windows permita conexiones entrantes al puerto
3306. - En Ubuntu, puede usar
ufwpara abrir el puerto si es necesario (aunque el esclavo solo inicia conexiones salientes). - Use contraseñas fuertes y evite exponer MySQL a internet.
- Para replicación en producción, se recomienda usar conexiones SSL.