Finché non esegui alcuna istruzione INSERT / UPDATE / DELETE direttamente sullo Slave, lo Slave dovrebbe andare bene. Altrimenti, la replica di MySQL potrebbe interrompersi se si INSERISCE una nuova riga in mydb.mytable sullo Slave e, tramite la replica, lo Slave in seguito rileva un INSERT di una riga su mydb.mytable con lo stesso TASTO PRIMARIO. Questo produce l'errore 1062 (chiave duplicata).
L'unico modo per scrivere a Slave senza interrompere la replica di MySQL è questo:
- Il master ha database db1, db2, db3
- Lo slave sta replicando i database db1, db2, db3 dal Master
- Corri
CREATE DATABASE db4;
sullo schiavo
- INSERISCI / AGGIORNA / ELIMINA solo a db4 sullo Slave
- Non si eseguono INSERT / UPDATE / DELETE solo su db1, db2, db3 sullo Slave
Per rilevare che un Master e uno Slave non sono sincronizzati senza scaricare alcun tool, selezionare una tabella qualsiasi ed eseguire CHECKSUM TABLE su un tavolo sul Master e sulla copia dello Slave della stessa tabella.
ESEMPIO
Se hai una tabella mydb.mytable
, esegui il comando contro di essa:
mysql> CHECKSUM TABLE mydb.mytable;
Se i valori non ritornano uguali, qualcosa non è sincronizzato.
Se vuoi esaminare un gruppo di tavoli alla rinfusa, puoi scaricare MAATKIT di Percona. Avrai bisogno di due strumenti specifici (Percona ha anche il Percona Toolkit che essi stessi hanno biforcato da MAATKIT che ora viene promosso di più)
o
pt-table-checksum
eseguirà una TABELLA CHECKSUM su tutte le tabelle su Master e Slave. È possibile configurarlo per eseguire tutti i database solo su quelli specifici.
pt-table-sync
può essere eseguito su uno slave su qualsiasi tabella. Usando le opzioni --print e --sync-to-master, puoi vedere quali istruzioni SQL devono essere eseguite sullo Slave per farlo corrispondere perfettamente al Master. Questo strumento non funziona con una tabella priva di PRIMARY KEY o UNIQUE KEY.
Ho usato MAATKIT per anni. Faccio ancora. Non ho ancora provato Percona Toolkit, ma sono sicuro che dovrebbe essere della stessa qualità di MAATKIT.