GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Handbuch für MySQL-Ereignisse und Ereignisplaner

Einführung

MySQL-Ereignisse sind Aufgaben, die nach einem benutzerdefinierten Zeitplan ausgeführt werden . Der Event Scheduler ist ein spezieller Thread, der die Events zu einem geplanten Zeitpunkt ausführt.

MySQL-Ereignisse sind hilfreich, da sie die Datenbankverwaltung und regelmäßige Datenbankbetriebsaufgaben erleichtern.

In diesem Tutorial erfahren Sie, was MySQL-Ereignisse sind und wie Sie sie einrichten und verwenden.

Voraussetzungen:

  • Ein System, auf dem MySQL auf einem Datenbankserver ausgeführt wird
  • MySQL-Benutzerkonto mit Root-Rechten

Was ist der MySQL-Ereignisplaner?

MySQL Event Scheduler ist ein Thread, der im Hintergrund läuft und die Ausführung geplanter Ereignisse verwaltet. Der Planer befindet sich in einem Ruhezustand, es sei denn, die globale Variable event_scheduler auf ON eingestellt ist oder 1 .

Der MySQL Event Scheduler ist die Alternative von MySQL zum Cron-Job . Einige Vorteile des Ereignisplaners sind:

  • Es wird direkt auf den MySQL-Server geschrieben.
  • Es ist plattform- und anwendungsunabhängig.
  • Es kann immer dann verwendet werden, wenn eine regelmäßige Datenbankaktualisierung oder -bereinigung erforderlich ist.
  • Es reduziert die Anzahl der Abfragekompilierungen.

Konfiguration des MySQL-Ereignisplaners

Der Status des MySQL-Ereignisplaners kann so konfiguriert werden, dass der Planer an gesetzt wird , aus , oder deaktivieren es.

Führen Sie den folgenden Befehl aus, um den Status des Ereignisplaners zu überprüfen:

SHOW processlist;

Der event_scheduler Die im Ergebnis angezeigte Systemvariable zeigt den Status des Ereignisplaners an. Hier der event_scheduler Der Variablenstatus ist Warten auf leere Warteschlange , was bedeutet, dass der Scheduler eingeschaltet ist und darauf wartet, dass ein Ereignis ihn auslöst.

Die möglichen Zustände sind:

  • ON :Der Ereignisplaner-Thread wird ausgeführt und führt alle geplanten Ereignisse aus. Dies ist der Standardzustand des Schedulers. Wenn der Planer ON ist , die SHOW processlist Die Befehlsausgabe listet ihn als Daemon-Prozess auf.

So schalten Sie den Ereignisplaner ON , führen Sie den folgenden Befehl aus:

SET GLOBAL event_scheduler = ON;

Der Wert ON ist austauschbar mit 1 .

  • OFF :Der Ereignisplaner-Thread wird nicht ausgeführt und wird nicht in der Ausgabe von SHOW processlist angezeigt . Wenn der Ereignisplaner auf OFF eingestellt ist , werden die geplanten Ereignisse nicht ausgeführt.

So schalten Sie den Ereignisplaner OFF , führen Sie den folgenden Befehl aus:

SET GLOBAL event_scheduler = OFF;

Der Wert OFF ist austauschbar mit 0 .

  • DISABLED :Dieser Zustand bedeutet, dass der Ereignisplaner nicht betriebsbereit ist. Der Thread wird nicht ausgeführt und erscheint nicht in der Ausgabe von SHOW processlist Befehl.

Um den Ereignisplaner zu deaktivieren, fügen Sie beim Starten des Servers die folgende Befehlszeilenoption hinzu:

--event-scheduler=DISABLED

MySQL-Ereignisplanung

Ein Ereignis ist ein Datenbankobjekt, das SQL-Anweisungen enthält, die zu einem bestimmten Zeitpunkt oder in regelmäßigen Abständen ausgeführt werden. Die Veranstaltungen beginnen und enden zu einem bestimmten Zeitpunkt und Datum.

Da MySQL-Ereignisse zu einem vom Benutzer festgelegten Zeitpunkt ausgeführt werden, werden diese Ereignisse auch als temporär bezeichnet Auslöser . Sie sollten jedoch nicht mit MySQL-Triggern verwechselt werden, bei denen es sich um Datenbankobjekte handelt, die als Reaktion auf bestimmte Ereignisse ausgeführt werden. Daher ist es besser, den Begriff Ereignisse zu verwenden wenn Sie sich auf geplante Aufgaben beziehen, um Verwirrung zu vermeiden.

In den folgenden Abschnitten wird beschrieben, wie man erstellt , zeigen , ändern oder entfernen Veranstaltungen.

Neue Ereignisse erstellen

Verwenden Sie zum Erstellen eines neuen Ereignisses die folgende Syntax:

CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body

Der IF NOT EXIST -Anweisung stellt sicher, dass der Ereignisname für die verwendete Datenbank eindeutig ist. Geben Sie anstelle von event_name einen eindeutigen Ereignisnamen an Syntax. Der Zeitplan für die Ausführung des Ereignisses wird nach ON SCHEDULE angegeben Erklärung. Das Ereignis kann ein einmaliges Ereignis sein oder ein wiederkehrendes Ereignis .

Geben Sie anstelle von event_body SQL-Anweisungen ein Syntax nach dem DO Stichwort. Der Ereignistext kann gespeicherte Prozeduren, einzelne Abfragen oder zusammengesetzte Anweisungen enthalten. Schreiben Sie zusammengesetzte Anweisungen innerhalb eines BEGIN END blockieren.

Ereignisse planen

Ereignisse können für eine spätere Ausführung oder für eine regelmäßige Ausführung geplant werden.

Einmaliges Ereignis

Ein einmaliges Ereignis wird nur einmal ausgeführt und dann automatisch gelöscht.

Um ein einmaliges Ereignis zu erstellen, geben Sie den Zeitstempel nach ON SCHEDULE an Anweisung mit der folgenden Syntax:

AT timestamp + [INTERVAL interval]

Die möglichen Optionen für Intervall sind:

  • JAHR
  • QUARTAL
  • MONAT
  • TAG
  • STUNDE
  • MINUTE
  • WOCHE
  • ZWEITE
  • JAHR_MONAT
  • DAY_HOUR
  • DAY_MINUTE
  • DAY_SECOND
  • HOUR_MINUTE
  • HOUR_SECOND
  • MINUTE_SECOND

Der Zeitstempel muss ein DATETIME sein oder TIMESTAMP Wert in der Zukunft. Um eine genaue Uhrzeit anzugeben, fügen Sie mit + INTERVAL ein Intervall zum Zeitstempel hinzu , eine positive Ganzzahl und eine der Intervalloptionen. Beachten Sie, dass dies nur bei Verwendung von CURRENT_TIMESTAMP gilt Funktion.

Zum Beispiel:

Hier findet das Ereignis zwei Tage nach seiner Erstellung statt, und die Aufgabe besteht darin, eine Tabelle namens test zu löschen .

Ereignisse werden nach der Ausführung automatisch gelöscht. Wenn Sie das Ereignis in der Datenbank speichern möchten, fügen Sie den ON COMPLETION PRESERVE hinzu -Klausel beim Erstellen des Ereignisses.

Wiederkehrendes Ereignis

Ein wiederkehrendes Ereignis tritt wiederholt zu einem bestimmten Zeitpunkt auf. Um ein wiederkehrendes Ereignis zu planen, verwenden Sie die folgende Syntax nach ON SCHEDULE Aussage:

EVERY interval 
STARTS timestamp [+ INTERVAL] 
ENDS timestamp [+ INTERVAL]

Die STARTS Schlüsselwort gibt an, wann die Ausführung des Ereignisses beginnt, während das Schlüsselwort ENDS Schlüsselwort gibt an, wann die Ausführung des Ereignisses stoppt.

Zum Beispiel:

Dieses Ereignis bewirkt, dass MySQL ab sofort alle sechs Monate den Tabellentest löscht.

Sie können auch ein Intervall angeben, um das Ereignis später zu starten. Zum Beispiel:

Sie können auch die Start- und Endzeit für das Ereignis angeben:

Dieses Ereignis veranlasst MySQL, die Tabelle mit dem Namen test zu löschen einmal alle sechs Monate für fünf Jahre, beginnend in fünf Tagen.

Ereignisse anzeigen

Der folgende Befehl zeigt alle in der Datenbank gespeicherten Ereignisse an:

SHOW EVENTS FROM database_name;

Beachten Sie, dass einmalige Ereignisse nach der Ausführung automatisch gelöscht werden und nicht in der Ausgabe von SHOW EVENTS angezeigt werden Befehl, es sei denn, Sie verwenden den ON COMPLETION PRESERVE -Klausel beim Erstellen des Ereignisses.

Die Ausgabe listet alle Ereignisse auf, die in der angegebenen Datenbank gespeichert sind.

Ereignisse ändern

Verwenden Sie das ALTER EVENT Anweisung zum Ändern eines bestehenden Ereignisses:

ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]

Der event_name muss ein Ereignis sein, das bereits existiert. Alle Anweisungen nach ALTER EVENT sind optional, je nachdem, was Sie ändern möchten. Auslassen von Klauseln im ALTER EVENT Befehl bedeutet, dass sie in ihrem vorherigen Zustand verbleiben. Jede eingeschlossene Klausel bedeutet, dass neue Werte, die Sie angeben, angewendet werden.

Zum Beispiel:

In diesem Beispiel haben wir das Ereignis umbenannt und seine SQL-Anweisung geändert.

Ereignisse entfernen (Ereignis löschen)

Um ein Ereignis zu löschen (fallen zu lassen), verwenden Sie die folgende Syntax:.

DROP EVENT [IF EXISTS] event_name;

Zum Beispiel:

Diese Aktion wird dauerhaft gelöscht das Ereignis aus der Datenbank.

Verwenden des IF EXISTS -Anweisung gibt eine Warnung aus, wenn ein solches Ereignis nicht existiert:

Einschränkungen für MySQL-Ereignisse

Bei der Verwendung von MySQL Events sind bestimmte Einschränkungen zu beachten. Einige davon sind:

  • Ereignisse können keine Ergebnismenge zurückgeben. Die Ausgabe wird an dev/null geleitet, und das Ereignis schlägt fehl oder ist erfolgreich, ohne den Benutzer zu benachrichtigen.
  • Bei Ereignisnamen wird die Groß- und Kleinschreibung nicht beachtet. Zwei Ereignisse können nicht denselben Namen mit unterschiedlicher Groß-/Kleinschreibung haben.
  • Ereignisse können nicht über den 19. Januar 2038 hinaus geplant werden – das Maximum, das in der Unix-Epoche dargestellt werden kann.
  • Ereignisse können nicht durch andere gespeicherte Programme, Trigger oder Ereignisse erstellt, gelöscht oder geändert werden.
  • Ereignisse können gespeicherte Programme oder Trigger nicht erstellen, löschen oder ändern.
  • Die Intervalle MONTH , YEAR_MONTH , QUARTER , und YEAR werden in Monaten gelöst. Alle anderen Intervalle werden in Sekunden aufgelöst.
  • Es können zwei Ereignisse mit demselben Zeitplan stattfinden, aber es gibt keine Möglichkeit, eine Ausführungsreihenfolge zu erzwingen.
  • Ein Event läuft immer mit Definierer-Privilegien. Der Thread führt das Ereignis als der Benutzer aus, der das Ereignis erstellt hat, mit den Rechten dieses Benutzers. Beachten Sie, dass das Entfernen eines Benutzers nicht die Ereignisse entfernt, die der Benutzer erstellt hat.
  • Ereignisse ändern nicht die Anzahl der Ausführung einer Anweisung, was bedeutet, dass es keine Auswirkung auf SHOW STATISTICS gibt Befehl.
  • Die maximale Verzögerung für die Ausführung eines Ereignisses beträgt zwei Sekunden. Die information_schema.events Tabelle zeigt immer den genauen Zeitpunkt der Ereignisausführung an.
  • Verwenden Sie benutzerdefinierte Variablen anstelle von Verweisen auf lokale Variablen in vorbereiteten Anweisungen innerhalb einer gespeicherten Routine.
  • Die Anzahl der rekursiven Aufrufe ist auf max_sp_recursion_depth begrenzt . Wenn diese Variable 0 ist, was der Standardwert ist, ist die Rekursivität deaktiviert.
  • Verwenden Sie die START TRANSACTION -Anweisung anstelle von BEGIN WORK , seit BEGIN WORK wird als Beginn von BEGIN END behandelt blockieren.
  • Jede andere Einschränkung gespeicherter Prozeduren gilt auch für Ereignisse.

Linux
  1. MySQL – Leistungsoptimierung und -optimierung

  2. Bash For Loop Guide und Beispiele

  3. Eine Anleitung zum Ausführen eines Reverse-Proxys für HTTP(S), SSH und MySQL/MariaDB mit NGINX

  4. So richten Sie LogAnalyzer mit Rsyslog und MySQL ein

  5. Erstellen Sie eine neue Datenbank und verwenden Sie sie in MySQL/MariaDB

Docker-Leitfaden:Bereitstellen von Ghost Blog mit MySQL und Traefik mit Docker

MySQL Suchen und Ersetzen

Die vollständige Anleitung zur Installation von MySQL auf Ubuntu

Wie man MySQL mit Percona und Keepalived multimastert

LILO Linux Bootloader Konfiguration und Anleitung

Leitfaden für Anfänger zur MySQL-Benutzerverwaltung