Binlog
Binary Log
Il Binlog (Binary Log) è il registro sequenziale che MySQL mantiene sul master per tracciare ogni operazione che modifica i dati. Lo slave lo legge per sapere esattamente cosa replicare, nell’ordine in cui è avvenuto. Senza Binlog non esiste replica, e senza replica non esiste alta disponibilità né disaster recovery su MySQL.
Come funziona #
Ogni COMMIT scrive nel Binlog uno o più eventi, a seconda del formato scelto:
- ROW: registra le righe effettivamente modificate (before/after image). Più verboso, ma deterministico.
- STATEMENT: registra la query SQL testuale. Compatto, ma alcune funzioni non deterministiche (
NOW(),UUID()) possono causare divergenze. - MIXED: MySQL sceglie automaticamente ROW o STATEMENT per ogni istruzione.
-- Verificare il formato attivo
SHOW VARIABLES LIKE 'binlog_format';
-- Ispezionare gli eventi di un file binlog
SHOW BINLOG EVENTS IN 'mysql-bin.000042' LIMIT 20;
Lo slave mantiene la posizione corrente nel Binlog tramite file e offset (replica classica) oppure tramite GTID (Global Transaction Identifier), che rende il failover molto più gestibile.
Quando si usa #
Il Binlog è attivo ogni volta che la replica è abilitata, ma viene sfruttato anche da strumenti di CDC come Debezium per catturare i cambiamenti e inviarli a pipeline di streaming. Va monitorato: un Binlog che cresce senza essere consumato dallo slave segnala un ritardo di replica. La retention si controlla con binlog_expire_logs_seconds (MySQL 8) o expire_logs_days (versioni precedenti).