In una replica MySQL Master / Slave, cosa accadrebbe se scrivo allo Slave?


17

Diverse domande

  • La voce Slave rimarrebbe finché non vi è un inserimento / aggiornamento / eliminazione nella tabella sul Master che potrebbe influenzare lo Slave?

  • In caso contrario, come posso garantire che lo Slave sia sincronizzato con il Master in futuro (eliminando la voce Slave o copiando quella voce sul Master manualmente)?

  • Ancora più importante, come posso rilevare che le tabelle non sono sincronizzate?


per favore, spiega bene la tua domanda ...
Abdul Manaf,

1
Una relazione master / slave non è una sincronizzazione unidirezionale da master a slave, ma non viceversa? Sto chiedendo cosa succederebbe se scrivessi allo schiavo in questo tipo di installazione.
kfmfe04,

Risposte:


14

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-checksumeseguirà una TABELLA CHECKSUM su tutte le tabelle su Master e Slave. È possibile configurarlo per eseguire tutti i database solo su quelli specifici.

pt-table-syncpuò 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.


ty per la risposta dettagliata. Pensavo di avere più domande, ma penso che le tue risposte abbiano coperto tutti i casi (la sincronizzazione pt-table sembra essere davvero utile).
kfmfe04,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.