Planificateur d'événements MySQL

MySQLBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser le planificateur d'événements MySQL (MySQL Event Scheduler) pour automatiser les tâches de base de données. Le planificateur d'événements est une fonctionnalité de MySQL qui exécute des instructions SQL à des moments ou intervalles planifiés. Ceci est utile pour automatiser les tâches de routine telles que la maintenance de la base de données, le nettoyage des données ou la génération de rapports périodiques.

Vous serez guidé à travers l'activation du planificateur d'événements, la création d'une base de données et d'une table, la planification d'un événement récurrent pour modifier des données, la vérification de l'exécution de l'événement, et enfin, la suppression de l'événement. À la fin de ce laboratoire, vous comprendrez les bases de l'utilisation du planificateur d'événements MySQL.

Activer le planificateur d'événements

Le planificateur d'événements MySQL (MySQL Event Scheduler) s'exécute comme un thread d'arrière-plan qui exécute les événements planifiés. Par défaut, cette fonctionnalité est désactivée. Votre première étape consiste à l'activer.

Ouvrez d'abord le terminal depuis votre bureau.

Connectez-vous au serveur MySQL en tant qu'utilisateur root. Dans cet environnement de laboratoire, vous pouvez utiliser sudo pour vous connecter sans mot de passe.

sudo mysql -u root

Une fois connecté, vous verrez l'invite MySQL (mysql>).

Vérifiez le statut actuel du planificateur d'événements avec la commande suivante :

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

La sortie indiquera que event_scheduler est OFF par défaut.

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

Pour activer le planificateur d'événements, exécutez la commande suivante. Ce paramètre est global et persistera tant que le serveur est en cours d'exécution.

SET GLOBAL event_scheduler = ON;

Vérifiez que la modification a réussi en vérifiant à nouveau le statut :

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

La sortie devrait maintenant afficher la valeur ON, confirmant que le planificateur d'événements est actif.

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

Maintenant que le planificateur d'événements est activé, vous pouvez passer à l'étape suivante.

Créer une base de données et une table

Avant de créer un événement planifié, vous avez besoin d'une base de données et d'une table avec lesquelles l'événement interagira. Dans cette étape, vous allez créer une base de données nommée test_db et une table nommée event_logs.

Toujours dans le shell MySQL, créez la base de données test_db. La clause IF NOT EXISTS empêche une erreur si la base de données existe déjà.

CREATE DATABASE IF NOT EXISTS test_db;

Basculez vers la base de données nouvellement créée pour en faire la base de données actuelle pour les commandes suivantes.

USE test_db;

Vous verrez un message de confirmation : Database changed.

Ensuite, créez la table event_logs. Cette table aura un id auto-incrémenté et une colonne counter que notre événement mettra à jour.

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

Enfin, insérez une ligne initiale dans la table event_logs avec une valeur de départ de 0. Cela donne à notre événement un enregistrement à mettre à jour.

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

Vous pouvez vérifier que la table a été créée et que les données ont été insérées correctement en exécutant les commandes suivantes :

SHOW TABLES;
SELECT * FROM event_logs;

La sortie devrait afficher la table event_logs et une seule ligne avec id = 1 et counter = 0.

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

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

Avec la base de données et la table prêtes, vous pouvez maintenant créer l'événement planifié.

Créer un événement récurrent

Vous allez maintenant créer un événement qui s'exécute périodiquement. Cet événement incrémentera la valeur de counter dans la table event_logs toutes les 10 secondes.

Assurez-vous que vous utilisez toujours la base de données test_db.

USE test_db;

Créez un événement nommé update_counter_event.

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

Analysons cette instruction :

  • CREATE EVENT update_counter_event : Définit un nouvel événement avec le nom update_counter_event.
  • ON SCHEDULE EVERY 10 SECOND : Spécifie que l'événement s'exécutera toutes les 10 secondes.
  • DO UPDATE ... : C'est l'instruction SQL que l'événement exécutera. Elle incrémente le counter pour la ligne où id est 1.

Pour vérifier que l'événement a été créé avec succès, utilisez la commande SHOW EVENTS.

SHOW EVENTS;

La sortie listera votre nouvel événement et ses détails. Vérifiez que son Status est ENABLED.

+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| 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)

Note : Le Definer et l'heure de Starts varieront.

L'événement est maintenant actif et programmé pour s'exécuter. Dans l'étape suivante, vous vérifierez s'il met à jour les données comme prévu.

Vérifier l'exécution de l'événement

Maintenant que l'événement est planifié, vous devez confirmer qu'il s'exécute correctement. Comme l'événement s'exécute toutes les 10 secondes, vous devriez voir la valeur de counter augmenter avec le temps.

Interrogez la table event_logs pour voir la valeur actuelle.

SELECT * FROM event_logs WHERE id = 1;

Maintenant, le counter pourrait être 2 ou un petit nombre.

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

Attendez environ 15 à 20 secondes pour permettre à l'événement de s'exécuter au moins une fois. Ensuite, exécutez à nouveau la requête SELECT.

SELECT * FROM event_logs WHERE id = 1;

Vous devriez constater que la valeur de counter a augmenté.

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

Si vous attendez plus longtemps et exécutez à nouveau la requête, la valeur continuera d'augmenter, confirmant que update_counter_event s'exécute avec succès selon son calendrier. Cela démontre la puissance des tâches automatisées basées sur le temps dans MySQL.

Supprimer l'événement

Lorsqu'un événement planifié n'est plus nécessaire, il est de bonne pratique de le supprimer pour éviter une consommation de ressources inutile. Dans cette dernière étape, vous allez supprimer l'update_counter_event.

Pour supprimer l'événement, utilisez l'instruction DROP EVENT. La clause IF EXISTS est recommandée pour éviter une erreur si l'événement a déjà été supprimé.

DROP EVENT IF EXISTS update_counter_event;

Pour vérifier que l'événement a été supprimé, exécutez à nouveau la commande SHOW EVENTS.

SHOW EVENTS;

La sortie devrait maintenant être un ensemble vide, confirmant qu'il n'y a plus d'événements planifiés dans la base de données test_db.

Empty set (0.00 sec)

L'update_counter_event ne s'exécutera plus. Vous pouvez le confirmer en attendant et en interrogeant à nouveau la table event_logs ; la valeur de counter n'augmentera plus.

Vous avez géré avec succès le cycle de vie d'un événement MySQL. Vous pouvez maintenant quitter le shell MySQL.

exit;

Résumé

Dans ce laboratoire, vous avez appris les bases de l'utilisation du planificateur d'événements MySQL (MySQL Event Scheduler) pour l'automatisation des tâches. Vous avez réussi à activer le planificateur, à configurer une base de données et une table, et à créer un événement récurrent pour mettre à jour automatiquement les données. Vous vous êtes également exercé à vérifier le statut et l'exécution d'un événement, et vous avez appris comment le supprimer lorsqu'il n'était plus nécessaire.

Ces compétences sont précieuses pour automatiser un large éventail de tâches d'administration et de maintenance de bases de données, contribuant ainsi à garantir l'intégrité des données et à réduire la charge de travail manuelle.