Frage

Ok, ich bin ein Setup mit einem einzigen Master und mehreren Slaves ausgeführt wird. Alle Schreib gehen über den Master und bis zu dem Slaves repliziert, die ausschließlich für liest verwendet werden.

Jetzt habe ich eine gespeicherte Prozedur (nicht-Funktion), die durch einen Trigger auf einem Einsatz aufgerufen wird. Nach der MySQL-Dokumentation, die für die Replikation löst den Anruf an den Trigger anmelden, während tatsächlich gespeicherten Prozeduren das Ergebnis der gespeicherten Prozedur protokollieren.

Meine Frage ist also, wenn meine Trigger ausgelöst wird, wird es sowohl den Trigger replizieren und die Ergebnisse des Verfahrens, dass die Trigger Anrufe (in dem Verfahren resultierenden effektiv laufen zweimal zu werden)? Oder wird es einfach den Trigger replizieren haben die Slaves erneut ausführen, um die gespeicherte Prozedur auf ihre eigenen?

Danke

War es hilfreich?

Lösung

In MySQL 5.0 (und MySQL 5.1 mit Aussage basiert Binärlogging), nur die anrufende Abfrage wird protokolliert, so in Ihrem Fall würde die INSERT protokolliert.

Auf dem Slave wird die INSERT ausgeführt wird und dann wird der Trigger erneut ausführen auf dem Slave werden. So ist der Auslöser muss auf dem Slave existieren, und vorausgesetzt, es funktioniert, dann wird es auf genau die gleiche Art und Weise wie der Master ausgeführt werden.

In MySQL 5.1 ist es zeilenbasierte Binärlogging, die nur log werden die Zeilen geändert werden, so dass der Auslöser würde auf dem Slave nicht erneut gebrannt werden, aber alle Zeilen, die nachwievor geändert werden würde.

Andere Tipps

Neben Harrison ausgezeichnete Antwort:

  • die Datenbanken synchronisiert sind (Schema, Daten, gleiche Version) Unter der Annahme, mit zu beginnen, sollte es einfach funktionieren
  • Wenn dies nicht der Fall, dann kann es sein, dass Sie etwas nicht deterministisch in Ihre Fragen oder Trigger verwenden. Fix das.
  • Unabhängig davon, wie Sie die Replikation verwenden, müssen Sie die Überwachung zu überprüfen, ob die Slaves immer synchron sind. Ohne Überwachung, werden sie nicht synchron werden (subtil) und Sie werden nicht bemerken. MySQL hat keine automatische integrierte Funktion für diese Überprüfung oder Festsetzung es.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top