INTRODUCCIÓN A LA REPLICACIÓN EN MYSQL
La replicación consiste en copiar automáticamente los datos de un servidor, llamado master o primary a uno o varios servidores, slaves o replicas.Principales
- Alta disponibilidad y failover
- Escalabilidad de lectura (leer desde réplicas).
- Backup sin afectar el servidor principal.
- Distribución geográfica de datos.
- Análisis de datos sin impactar producción.
Arquitecturas Comunes
- Master → Slave(s) (la más usada).
- Master-Master (activo-pasivo o activo-activo con precauciones).
- Multi-Source Replication (varios masters a una réplica).
- MySQL Group Replication (basado en Paxos, ofrece alta disponibilidad nativa).
- MySQL InnoDB Cluster (Group Replication + MySQL Router + MySQL Shell).
Componentes Clave de la Replicación
- Binary Log (log_bin): Registro de todos los cambios en el master.
- Relay Log: En las réplicas, copia temporal de los eventos recibidos.
- GTID (Global Transaction Identifier): Desde MySQL 5.6, identifica cada transacción de forma única en toda la topología.
- IO Thread: En la réplica, se encarga de leer eventos del master.
- SQL Thread: En la réplica, se encarga de ejecutar los eventos.
Tipos de Replicación en MySQL
Según el formato de registro
Recomendación actual: Usar Row-based,especialmente con GTID.Según el modo de sincronización
- Asíncrona (predeterminada): El master no espera confirmación de las réplicas.
- Semi-síncrona: El master espera a que al menos una réplica confirme que recibió el evento.
- Síncrona: Solo posible con MySQL Group Replication o NDB Cluster.
Cómo Configurar Replicación Master-Slave con GTID
El término GTID se refiere principalmente a Global Transaction Identifier, Identificador Global de Transacción, en el ámbito de las bases de datos relacionales, como MySQL y Azure Database for MySQL. Es un identificador único que se genera y asigna automáticamente a cada transacción confirmada en el servidor.- Configuración del Master ("my.cnf")
[mysqld] server-id = 1 log_bin = mysql-bin binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON expire_logs_days = 7 - Configuración de la Réplica ("my.cnf")
[mysqld] server-id = 2 log_bin = mysql-bin relay_log = relay-bin gtid_mode = ON enforce_gtid_consistency = ON read_only = ON # Recomendado super_read_only = ON# MySQL 8.0+ - En el Master
- Crear usuario de replicación CREATE USER 'repl'@'%' IDENTIFIED BY 'ContraseñaSegura123'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- Ver posición GTID SHOW MASTER STATUS\G - En la Réplica
CHANGE REPLICATION SOURCE TO SOURCE_HOST = 'IP_DEL_MASTER', SOURCE_USER = 'repl', SOURCE_PASSWORD = 'ContraseñaSegura123', SOURCE_AUTO_POSITION = 1;-- Importante con GTID START REPLICA; -- Ver estado SHOW REPLICA STATUS\G
Monitorización de Replicación
Comandos esenciales
-- Estado detallado
SHOW REPLICA STATUS\G
-- Ver lag (MySQL 8.0+)
SELECT SOURCE_SERVER_UUID, THREAD_ID, LAST_APPLIED_TRANSACTION,
LAST_APPLIED_TRANSACTION_END_QUEUE_TIMESTAMP
FROM performance_schema.replication_applier_status_by_worker;
-- Chequear si está sincronizado
SHOW SLAVE STATUS\G -- (versión antigua)
Herramientas recomendadas
- Percona Toolkit (pt-table-checksum, pt-table-sync).
- MySQL Enterprise Monitor.
- Prometheus + Grafana (exporter de MySQL).
- Orchestrator (para failover).
Mejores Prácticas
- Usar siempre GTID.
- Configura read_only y super_read_only en réplicas.
- Monitorizar el replication lag constantemente.
- Usar réplicas con hardware similar o superior al master.
- Implementar backup de réplicas (no del master).
- Configura binlog_expire_logs_seconds adecuadamente.
- Usat filtrado de replicación solo cuando sea realmente necesario.
- En entornos críticos, considerar MySQL Group Replication o InnoDB Cluster.
Problemas Comunes y Soluciones
- Error 1236 (binlog purgeado): Restaurar con backup + "START REPLICA UNTIL_SQL_BEFORE_GTIDS".
- Error 1062 (duplicados): Usar "pt-table-sync".
- Lag alto: Aumentar "slave_parallel_workers", revisar queries lentas, usar RBR..
- Réplica desincronizada: "pt-table-checksum" + "pt-table-sync".