MySQL Event Scheduler

MySQLBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie den MySQL Event Scheduler verwenden, um Datenbankaufgaben zu automatisieren. Der Event Scheduler ist eine Funktion in MySQL, die SQL-Anweisungen zu geplanten Zeiten oder Intervallen ausführt. Dies ist nützlich für die Automatisierung routinemäßiger Aufgaben wie Datenbankwartung, Datenbereinigung oder periodische Berichterstattung.

Sie werden durch die Aktivierung des Event Schedulers, die Erstellung einer Datenbank und einer Tabelle, die Planung eines wiederkehrenden Events zur Datenmodifikation, die Überprüfung der Ausführung des Events und schließlich die Entfernung des Events geführt. Am Ende dieses Labs werden Sie die Grundlagen der Verwendung des MySQL Event Schedulers verstehen.

Event Scheduler aktivieren

Der MySQL Event Scheduler läuft als Hintergrund-Thread, der geplante Events ausführt. Standardmäßig ist diese Funktion deaktiviert. Ihr erster Schritt ist, sie zu aktivieren.

Öffnen Sie zuerst das Terminal auf Ihrem Desktop.

Verbinden Sie sich als Benutzer root mit dem MySQL-Server. In dieser Laborumgebung können Sie sudo verwenden, um sich ohne Passwort zu verbinden.

sudo mysql -u root

Sobald Sie verbunden sind, sehen Sie die MySQL-Eingabeaufforderung (mysql>).

Überprüfen Sie den aktuellen Status des Event Schedulers mit dem folgenden Befehl:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Die Ausgabe zeigt, dass der event_scheduler standardmäßig auf OFF steht.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

Um den Event Scheduler zu aktivieren, führen Sie den folgenden Befehl aus. Diese Einstellung ist global und bleibt bestehen, solange der Server läuft.

SET GLOBAL event_scheduler = ON;

Überprüfen Sie, ob die Änderung erfolgreich war, indem Sie den Status erneut prüfen:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Die Ausgabe sollte nun den Wert ON anzeigen, was bestätigt, dass der Event Scheduler aktiv ist.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | ON    |
+------------------+-------+
1 row in set (0.00 sec)

Nachdem der Event Scheduler nun aktiviert ist, können Sie mit dem nächsten Schritt fortfahren.

Datenbank und Tabelle erstellen

Bevor Sie ein geplantes Event erstellen, benötigen Sie eine Datenbank und eine Tabelle, mit der das Event interagieren kann. In diesem Schritt erstellen Sie eine Datenbank namens test_db und eine Tabelle namens event_logs.

Während Sie sich noch in der MySQL-Shell befinden, erstellen Sie die Datenbank test_db. Die Klausel IF NOT EXISTS verhindert einen Fehler, falls die Datenbank bereits existiert.

CREATE DATABASE IF NOT EXISTS test_db;

Wechseln Sie zur neu erstellten Datenbank, um sie zur aktuellen Datenbank für nachfolgende Befehle zu machen.

USE test_db;

Sie sehen eine Bestätigungsmeldung: Database changed.

Erstellen Sie als Nächstes die Tabelle event_logs. Diese Tabelle wird eine automatisch inkrementierende id und eine counter-Spalte haben, die unser Event aktualisieren wird.

CREATE TABLE event_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    counter INT NOT NULL
);

Fügen Sie schließlich eine anfängliche Zeile in die Tabelle event_logs mit dem Startwert 0 ein. Dies gibt unserem Event einen Datensatz zum Aktualisieren.

INSERT INTO event_logs (id, counter) VALUES (1, 0);

Sie können überprüfen, ob die Tabelle korrekt erstellt und die Daten korrekt eingefügt wurden, indem Sie die folgenden Befehle ausführen:

SHOW TABLES;
SELECT * FROM event_logs;

Die Ausgabe sollte die Tabelle event_logs und eine einzelne Zeile mit id = 1 und counter = 0 anzeigen.

+-----------------+
| Tables_in_test_db |
+-----------------+
| event_logs      |
+-----------------+
1 row in set (0.00 sec)

+----+---------+
| id | counter |
+----+---------+
|  1 |       0 |
+----+---------+
1 row in set (0.00 sec)

Nachdem die Datenbank und die Tabelle bereit sind, können Sie nun das geplante Event erstellen.

Wiederkehrendes Event erstellen

Nun erstellen Sie ein Event, das periodisch ausgeführt wird. Dieses Event wird alle 10 Sekunden den counter-Wert in der Tabelle event_logs erhöhen.

Stellen Sie sicher, dass Sie weiterhin die Datenbank test_db verwenden.

USE test_db;

Erstellen Sie ein Event namens update_counter_event.

CREATE EVENT update_counter_event
ON SCHEDULE EVERY 10 SECOND
DO
  UPDATE event_logs SET counter = counter + 1 WHERE id = 1;

Lassen Sie uns diese Anweisung aufschlüsseln:

  • CREATE EVENT update_counter_event: Definiert ein neues Event mit dem Namen update_counter_event.
  • ON SCHEDULE EVERY 10 SECOND: Gibt an, dass das Event alle 10 Sekunden ausgeführt wird.
  • DO UPDATE ...: Dies ist die SQL-Anweisung, die das Event ausführt. Sie erhöht den counter für die Zeile, bei der id gleich 1 ist.

Um zu überprüfen, ob das Event erfolgreich erstellt wurde, verwenden Sie den Befehl SHOW EVENTS.

SHOW EVENTS;

Die Ausgabe listet Ihr neues Event und seine Details auf. Überprüfen Sie, ob sein Status ENABLED ist.

+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db      | Name                 | Definer       | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| test_db | update_counter_event | root@localhost| SYSTEM    | RECURRING | NULL       | 10             | SECOND         | 2024-05-27 12:00:00 | NULL | ENABLED |          1 | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

Hinweis: Der Definer und die Startzeit variieren.

Das Event ist nun aktiv und zur Ausführung geplant. Im nächsten Schritt überprüfen Sie, ob es die Daten wie erwartet aktualisiert.

Event-Ausführung prüfen

Nachdem das Event geplant ist, müssen Sie bestätigen, dass es korrekt ausgeführt wird. Da das Event alle 10 Sekunden läuft, sollten Sie sehen, wie der counter-Wert mit der Zeit ansteigt.

Fragen Sie die Tabelle event_logs ab, um den aktuellen Wert zu sehen.

SELECT * FROM event_logs WHERE id = 1;

Nun könnte der counter den Wert 2 oder eine kleine Zahl haben.

+----+---------+
| id | counter |
+----+---------+
|  1 |       2 |
+----+---------+
1 row in set (0.00 sec)

Warten Sie etwa 15-20 Sekunden, damit das Event mindestens einmal ausgeführt werden kann. Führen Sie dann die SELECT-Abfrage erneut aus.

SELECT * FROM event_logs WHERE id = 1;

Sie sollten sehen, dass der counter-Wert gestiegen ist.

+----+---------+
| id | counter |
+----+---------+
|  1 |       3 |
+----+---------+
1 row in set (0.00 sec)

Wenn Sie länger warten und die Abfrage erneut ausführen, wird der Wert weiter ansteigen, was bestätigt, dass das update_counter_event erfolgreich nach seinem Zeitplan ausgeführt wird. Dies demonstriert die Leistungsfähigkeit von automatisierten, zeitbasierten Aufgaben in MySQL.

Event löschen

Wenn ein geplantes Event nicht mehr benötigt wird, ist es eine gute Praxis, es zu entfernen, um unnötigen Ressourcenverbrauch zu vermeiden. In diesem letzten Schritt löschen Sie das update_counter_event.

Um das Event zu löschen, verwenden Sie die Anweisung DROP EVENT. Die Klausel IF EXISTS wird empfohlen, um einen Fehler zu vermeiden, falls das Event bereits entfernt wurde.

DROP EVENT IF EXISTS update_counter_event;

Um zu überprüfen, ob das Event gelöscht wurde, führen Sie erneut den Befehl SHOW EVENTS aus.

SHOW EVENTS;

Die Ausgabe sollte nun ein leeres Set sein, was bestätigt, dass keine weiteren geplanten Events in der Datenbank test_db vorhanden sind.

Empty set (0.00 sec)

Das update_counter_event wird nicht mehr ausgeführt. Sie können dies bestätigen, indem Sie warten und die Tabelle event_logs erneut abfragen; der counter-Wert wird nicht weiter steigen.

Sie haben den Lebenszyklus eines MySQL-Events erfolgreich verwaltet. Sie können nun die MySQL-Shell beenden.

exit;

Zusammenfassung

In diesem Lab haben Sie die Grundlagen der Verwendung des MySQL Event Schedulers zur Automatisierung von Aufgaben gelernt. Sie haben erfolgreich den Scheduler aktiviert, eine Datenbank und eine Tabelle eingerichtet und ein wiederkehrendes Event erstellt, um Daten automatisch zu aktualisieren. Sie haben auch geübt, den Status und die Ausführung eines Events zu überprüfen, und gelernt, wie man es entfernt, wenn es nicht mehr benötigt wird.

Diese Fähigkeiten sind wertvoll für die Automatisierung einer breiten Palette von Datenbankadministrations- und Wartungsaufgaben, um die Datenintegrität zu gewährleisten und den manuellen Arbeitsaufwand zu reduzieren.