Autor: shuixian
Funktionieren gespeicherte Prozeduren und Funktionen von MySQL 5.1 bei der Replikation?
Ja, das Standardverhalten wird in gespeicherten Prozeduren und Funktionen ausgeführt, die vom Master-MySQL-Server auf den Slave-Server repliziert werden.
Können gespeicherte Prozeduren und Funktionen, die auf dem Master-Server erstellt wurden, auf den Slave-Server kopiert werden?
Ja, gespeicherte Prozeduren und Funktionen, die über allgemeine DDL-Anweisungen ausgeführt werden und deren Erstellung auf dem Master-Server erfolgt, werden auf den Slave-Server kopiert, sodass das Ziel auf beiden Servern vorhanden ist. ALTER- und DROP-Anweisungen für gespeicherte Prozeduren und Funktionen werden ebenfalls repliziert.
Wie kommt es zu Verhalten innerhalb replizierter gespeicherter Prozeduren und Funktionen?
MySQL zeichnet jedes DML-Ereignis auf, das innerhalb gespeicherter Prozeduren und Funktionen auftritt, und repliziert diese einzelnen Aktionen auf Slave-Servern. Tatsächliche Aufrufe gespeicherter Prozeduren und Funktionen werden nicht kopiert.
Gibt es besondere Sicherheitsanforderungen für die gemeinsame Verwendung gespeicherter Prozeduren, Funktionen und Replikation?
Ja, da ein Slave die Berechtigung hat, jede Anweisung auszuführen, die das Binärprotokoll des Masters liest, gelten die angegebenen Sicherheitseinschränkungen für gespeicherte Prozeduren und Funktionen, die bei der Replikation verwendet werden. Wenn Replikation oder Binärprotokollierung generell aktiviert sind (für Point-in-Time-Wiederherstellungszwecke), stehen dem MySQL-DBA zwei Sicherheitsoptionen zur Verfügung:
Jedem Benutzer, der gespeicherte Prozeduren erstellen möchte, müssen SUPER-Berechtigungen gewährt werden.
Alternativ kann ein DBA die Systemvariable log_bin_trust_routine_creators auf 1 setzen, wodurch jeder mit standardmäßigen CREATE ROUTINE-Berechtigungen gespeicherte Prozeduren und Funktionen erstellen kann.
Welche Einschränkungen gelten für das Verhalten beim Kopieren gespeicherter Prozeduren und Funktionen?
Unbestimmte (zufällige) oder zeitbasierte Zeilen, die in gespeicherte Prozeduren eingebettet sind, werden nicht ordnungsgemäß kopiert. Zufällig generierte Ergebnisse sind naturgemäß vorhersehbar und können nicht zuverlässig geklont werden. Daher wird auf dem Slave repliziertes zufälliges Verhalten nicht das auf dem Master auftretende Verhalten widerspiegeln. Beachten Sie, dass das Deklarieren einer gespeicherten Prozedur oder Funktion DETERMINISTIC oder das Setzen der Systemvariablen auf 0 in log_bin_trust_routine_creators den Aufruf von Zufallswertoperationen ermöglicht.
Darüber hinaus ist zeitbasiertes Verhalten auf dem Slave-Server nicht reproduzierbar, da ein solches zeitbasiertes Verhalten in der gespeicherten Prozedur über das für die Replikation verwendete Binärprotokoll nicht reproduzierbar ist, da das Binärprotokoll nur DML-Ereignisse protokolliert und keine Zeitbeschränkungen enthält.
Wenn schließlich während einer großen DML-Aktion (z. B. einer Masseneinfügung) ein Fehler in einer nicht interaktiven Tabelle auftritt, wird die nicht interaktive Tabelle möglicherweise einer Replikation unterzogen und der Masterserver wird möglicherweise teilweise von der DML-Aktion in der replizierten Version aktualisiert der nicht interaktiven Tabelle. Aufgrund des aufgetretenen Fehlers erfolgte jedoch kein Update auf dem Slave-Server. Für das DML-Verhalten der Funktion wird der Arbeitsbereich mit dem Schlüsselwort IGNORE ausgeführt, sodass Aktualisierungen, die Fehler auf dem Master-Server verursachen, ignoriert werden und Aktualisierungen, die keine Fehler verursachen, auf den Slave-Server kopiert werden.