Domanda

Ok, sto eseguendo una configurazione con un singolo master e un numero di slave.Tutte le scritture passano attraverso il master e vengono replicate fino agli slave che vengono utilizzati esclusivamente per le letture.

Ora ho una procedura memorizzata (non una funzione) che viene chiamata da un trigger su un insert.Secondo i documenti MySQL, per i trigger di replica registra la chiamata al trigger mentre le procedure memorizzate registrano effettivamente il risultato della procedura memorizzata.

Quindi la mia domanda è: quando il trigger viene attivato, replicherà sia il trigger che i risultati della procedura richiamata dal trigger (con il risultato che la procedura verrà effettivamente eseguita due volte)?O replicherà semplicemente il trigger facendo in modo che gli schiavi riescano a eseguire nuovamente la procedura memorizzata da soli?

Grazie

È stato utile?

Soluzione

In MySQL 5.0 (e MySQL 5.1 con registrazione binaria basata su istruzioni), viene registrata solo la query chiamante, quindi nel tuo caso verrebbe registrato l'INSERT.

Sullo slave verrà eseguito l'INSERT e quindi il trigger verrà eseguito nuovamente sullo slave.Quindi il trigger deve esistere sullo slave e, supponendo che esista, verrà eseguito esattamente nello stesso modo del master.

In MySQL 5.1, è presente il logging binario basato su righe, che registrerà solo le righe modificate, quindi il trigger non verrebbe riattivato sullo slave, ma tutte le righe modificate verrebbero comunque propagate.

Altri suggerimenti

Oltre all'eccellente risposta di Harrison:

  • Supponendo che i database siano sincronizzati (schema, dati, stessa versione) per cominciare, dovrebbe funzionare
  • In caso contrario, è possibile che tu stia utilizzando qualcosa di non deterministico nelle tue query o trigger.Risolvilo.
  • Indipendentemente da come utilizzi la replica, è necessario disporre di un monitoraggio per verificare che gli slave siano sempre sincronizzati.Senza alcun monitoraggio, diventeranno fuori sincrono (sottilmente) e non te ne accorgerai.MySQL non dispone di funzionalità integrate automatiche per verificare questo problema o risolverlo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top