Cosa succede se si fa una bella insert sul nostro database mysql slave?
Due cose :
- Lo slave server si disallinea
- Il sistemista bestemmia
mysql> show slave status\GLo Slave utilizza piu’ thread. Il primo e’ una connessione remota al Master ed ha il compito di raccogliere i dati dal bin-log (BinLog Dump) ed e’ sempre attivo. Gli altri thread sono locali ed hanno il compito di ricevere il contenuto del bin-log (Slave I/O) e di applicarlo alla base dati (Slave SQL). In caso d’errore nell’inserimento dei dati il thread Slave SQL si interrompe mentre lo Slave I/O continua a raccogliere i dati dal Master. Con show slave status\G si ottiene l’indicazione dell’errore occorso; una volta corretto il problema la replicazione riprende dal punto in cui si era interrotta applicando il relay-log.
Per risolvere il problema numero 1 bisogna seguire questa facile guida :
1. Stoppare sugli SLAVE SERVER il servizio di replica :
mysql> stop slave;
2. Lokkare le tabelle sul MYSQL MASTER (occhio a non uscire da mysql altrimenti questo comando viene flushato)
mysql> FLUSH TABLES WITH READ LOCK;
3. Effettuare un dump completo e copiarli sullo/i SLAVE/s :
mysqldump --all-database > databases.sql -u root -p
4. Restore DB sugli SLAVE
mysql -u root -p databases.sql
5. Controllare lo stato del MYSQL MASTER per vedere fino a che punto è arrivata il transaction bin log : (in un altra sessione ssh, vedi punto 2)
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000059 | 17908642 | | | +------------------+----------+--------------+------------------+
6. Riattivare il MYSQL SLAVE
CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000059', MASTER_LOG_POS = 17148864;
7. Riattivare lo slave
mysql> start slave;
8. Riattivare il MYSQL MASTER in scrittura
UNLOCK TABLES;