it-swarm.it

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

Diverse domande

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

  • In caso contrario, come posso assicurarmi 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?

17
kfmfe04

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
  • Tu corri CREATE DATABASE db4; sullo Slave
  • INSERISCI/AGGIORNA/ELIMINA solo a db4 sullo Slave
  • Non si eseguono INSERT/UPDATE/DELETE solo su db1, db2, db3 sullo Slave

Per rilevare un Master e uno Slave non sincronizzati senza scaricare alcun tool, selezionare una tabella ed eseguire CHECKSUM TABLE contro una tabella sulla copia del Master e dello Slave della stessa tabella.

[~ ~ #] esempio [~ ~ #]

Se hai una tabella mydb.mytable, esegui il comando contro di esso:

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 avere una corrispondenza perfetta con il 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.

14
RolandoMySQLDBA