Relay Log
Il relay log è un insieme di file creati da uno slave durante la replica.
Utilizza lo stesso formato del log binario, e contiene la registrazione degli eventi che riguardano i dati o la struttura. Consiste di un insieme di file di log e un file indice che contiene un elenco dei log.
Gli eventi vengono letti dal log binario del master e scritti nel relay log dello slave. Vengono poi eseguiti sullo slave. I vecchi file del relay log vengono rimossi automaticamente quando non sono più necessari.
Siccome i file del relay log usano lo stesso formato del log binario, possono essere letti con il programma mysqlbinlog.
Creare i file del relay log
I nuovi file del relay log vengono creati al verificarsi dei seguenti eventi:
- Quando si avvia un threa IO.
- Quando avviene il flush dei log, con FLUSH LOGS o con mysqladmin flush-logs.
- Quando vengono raggiunte le dimensioni massime, determinate dalla variabile di sistema max_relay_log_size.
I nomi del relay log
Per default, i file del relay log si chiameranno host_name-relay-bin.nnnnnn
, dove host_name
è il nome host del server, e #nnnnnn è un numero progressivo.
Questo però crea problemi se si modifica il nome dello slave, e causa gli errori Failed to open the relay log
e Could not find target log during relay log initialization
. Per evitarlo, si può specificare il nome dei file del relay log tramite le variabili di sistema relay_log e relay_log_index.
Se si riscontra il problema mentre la replica è in corso, è possibile arrestare lo slave, aggiungere il vecchio file indice all'inizio del nuovo indice e riavviare lo slave.
Per esempio:
shell> cat NEW_relay_log_name.index >> OLD_relay_log_name.index shell> mv NEW_relay_log_name.index OLD_relay_log_name.index
Eliminare i vecchi file del relay log
I vecchi file del relay log vengono eliminati dopo che tutti i loro eventi sono stati implementati nello slave, e i file non sono più necessari. Questo comportamento può essere modificato impostando la variabile relay_log_purge, il cui valore predefinito è 1
, a 0
, nel qual caso i vecchi file saranno lasciati sul server.
Se i file del relay log occupano troppo spazio sullo slave, è possibile modificare la variabile relay_log_space_limit per modificarne le dimensioni. Il thread IO si fermerà finché il thread SQL non avrà ripulito il backlog. Per default non c'è alcun limite.