Der Ereignisplaner ist eine weitere neue Funktion, die in MySQL 5.1 hinzugefügt wurde. Er kann als geplanter Aufgabenplaner verwendet werden und ersetzt einige der geplanten Funktionen, die nur vom Betriebssystem-Aufgabenplaner ausgeführt werden konnten. Beispielsweise kann Crontabe unter Linux nur einmal pro Minute ausgeführt werden, während der MySQL-Ereignisplaner eine Aufgabe pro Sekunde ausführen kann, was in einigen Umgebungen, die eine hohe Echtzeitleistung erfordern, sehr praktisch ist.
Der Event-Scheduler wird regelmäßig ausgelöst und ausgeführt. Aus dieser Perspektive kann man ihn auch als „temporären Trigger“ bezeichnen. Trigger führen nur einige Anweisungen für Ereignisse aus, die von einer bestimmten Tabelle generiert werden, während Ereignisplaner einige Anweisungen zu einem bestimmten Zeitpunkt (Intervall) ausführen. Ereignisse werden von einem bestimmten Thread verwaltet, dem sogenannten „Event Scheduler“. Nach der Aktivierung des Ereignisplaners kann ein Konto mit SUPER-Berechtigungen diesen Thread sehen, indem es SHOW PROCESSLIST ausführt. Durch Festlegen des Werts der globalen Variablen event_scheduler können Sie dynamisch steuern, ob der Ereignisplaner aktiviert ist.
(root:localhost:)test> SET GLOBAL event_scheduler = ON;(root:localhost:)test> ******* ********** 4. Zeile ***************************ID: 46147Benutzer : event_schedulerHost: localhostdb: NULLBefehl: DaemonZeit: 1Status: Warten auf leere WarteschlangeInfo: NULL
Wie oben ist der Eigentümer dieses Threads event_scheduler.
Anwendungsfall
Dieser Fall nutzt die Eigenschaften des Ereignisplaners, um jede Sekunde eine gespeicherte Prozedur aufzurufen, um festzustellen, ob der SLAVE normal läuft Der SLAVE wird geschlossen, 0 Fehler ignorieren und SLAVE neu starten.
Erstellen Sie zuerst die gespeicherte Prozedur
Trennzeichen //Erstellen Sie die Prozedur `Slave_Monitor`()beginSELECT VARIABLE_VALUE INTO @SLAVE_STATUS FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME='SLAVE_RUNNING';IF ( 'ON' != @SLAVE_STATUS) THENSET GLOBAL SQL_SLAVE_SKip_COUNTER=0;SLAVE START;END IF;end; //delimiter ;
Weil die gespeicherte Prozedur so etwas wie SHOW SLAVE STATUS nicht aufrufen kann Daher können die genauen Kopierfehlerinformationen und der Fehlercode nicht abgerufen werden und die verschiedenen Situationen, in denen SLAVE stoppt, können nicht weiter verarbeitet werden.
Als nächstes erstellen Sie die Aufgabe
EREIGNIS ERSTELLEN, WENN „Slave_Monitor“ NICHT EXISTIERT
PLANMÄSSIG ALLE 5 SEKUNDEN
NACH ABSCHLUSS PRESERVE
DO
CALL Slave_Monitor();
Erstellt eine Aufgabe und führt sie alle 5 Sekunden aus. Nach dem Ende der Aufgabe bleibt die Aufgabe weiterhin erhalten gelöscht. Natürlich wird die Aufgabe in diesem Beispiel nicht beendet, es sei denn, sie wird manuell deaktiviert.
Wenn Sie eine Aufgabe während des Betriebs vorübergehend schließen möchten, führen Sie die ALTER EVENT-Anweisung aus:
(root:localhost:)test> alter event `Slave_Monitor ` ON
COMPLETION PRESERVE DISABLE;
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE ENABLE;
Das ist alles. Für eine detaillierte Beschreibung Erläuterung des MySQL-Ereignisplaners Event Scheduler. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!