Volver a MySQL Intermedio
Monitoreo y Troubleshooting de Replicación
Monitorear el Lag
-- Lag clásico
SHOW SLAVE STATUS\G
-- Revisar: Seconds_Behind_Master
-- Lag basado en heartbeat (más preciso)
-- En el primario:
CHANGE MASTER TO MASTER_HEARTBEAT_PERIOD = 1;
-- Vía performance_schema
SELECT
channel_name,
last_error_number,
last_error_message,
last_heartbeat_timestamp
FROM performance_schema.replication_connection_status;
Monitoreo de GTID
-- Verificar sets de GTID
SHOW MASTER STATUS; -- executed_gtid_set
SHOW SLAVE STATUS\G -- executed/retrieved_gtid_set
-- Encontrar transacciones faltantes
SELECT GTID_SUBTRACT(
@@global.gtid_purged,
(SELECT received_transaction_set
FROM performance_schema.replication_connection_status)
) AS gtids_faltantes;
Resolver Errores Comunes
-- Error 1062: Clave duplicada — saltar de forma segura
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
-- Con GTID: inyectar transacción vacía
STOP SLAVE;
SET GTID_NEXT = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:N';
BEGIN; COMMIT;
SET GTID_NEXT = 'AUTOMATIC';
START SLAVE;
-- Reconstruir réplica desde cero
STOP SLAVE;
RESET SLAVE ALL;
-- Tomar nuevo dump del primario con --master-data=2
Replicación Semi-Síncrona
-- Instalar en el primario
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000; -- fallback async 10s
-- Instalar en la réplica
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
-- Monitorear
SHOW STATUS LIKE 'rpl_semi_sync%';
Replicación con Retardo
-- Mantener réplica 1 hora por detrás
STOP SLAVE;
CHANGE MASTER TO MASTER_DELAY = 3600;
START SLAVE;
SHOW SLAVE STATUS\G
-- SQL_Delay: 3600
-- SQL_Remaining_Delay: 847
Replicación Paralela
[mysqld]
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8
slave_preserve_commit_order = 1
-- Monitorear trabajadores paralelos
SELECT THREAD_ID, NAME, PROCESSLIST_STATE
FROM performance_schema.threads
WHERE NAME LIKE 'thread/sql/slave_worker%';