Présentation
Les événements MySQL sont des tâches qui s'exécutent selon un horaire défini par l'utilisateur . Le planificateur d'événements est un fil spécial qui exécute les événements à une heure planifiée.
Les événements MySQL sont utiles car ils facilitent la gestion de la base de données et les tâches opérationnelles périodiques de la base de données.
Dans ce didacticiel, vous apprendrez ce que sont les événements MySQL et comment les configurer et les utiliser.
Prérequis :
- Un système exécutant MySQL sur un serveur de base de données
- Compte utilisateur MySQL avec privilèges root
Qu'est-ce que le planificateur d'événements MySQL ?
MySQL Event Scheduler est un thread qui s'exécute en arrière-plan et gère l'exécution des événements planifiés. Le planificateur est en état de veille à moins que la variable globale event_scheduler
est défini sur ON
ou 1
.
Le planificateur d'événements MySQL représente l'alternative de MySQL au travail Cron . Certains avantages du planificateur d'événements sont :
- Il est écrit directement sur le serveur MySQL.
- Il est indépendant de la plate-forme et de l'application.
- Il peut être utilisé chaque fois qu'une mise à jour ou un nettoyage régulier de la base de données est nécessaire.
- Cela réduit le nombre de compilations de requêtes.
Configuration du planificateur d'événements MySQL
L'état du planificateur d'événements MySQL peut être configuré pour activer le planificateur sur , désactivé , ou désactiver il.
Pour vérifier l'état du planificateur d'événements, exécutez la commande suivante :
SHOW processlist;
Le event_scheduler
La variable système affichée dans le résultat indique l'état du planificateur d'événements. Ici, le event_scheduler
l'état de la variable est En attente d'une file d'attente vide , ce qui signifie que le planificateur est activé et attend qu'un événement le déclenche.
Les états possibles sont :
ON
:Le thread du planificateur d'événements est en cours d'exécution et exécute tous les événements planifiés. Il s'agit de l'état par défaut du planificateur. Si le planificateur estON
, leSHOW processlist
la sortie de la commande le répertorie en tant que processus démon.
Pour activer le planificateur d'événements ON
, exécutez la commande suivante :
SET GLOBAL event_scheduler = ON;
La valeur ON
est interchangeable avec 1
.
OFF
:Le thread du planificateur d'événements n'est pas en cours d'exécution et n'apparaît pas dans la sortie deSHOW processlist
. Si le planificateur d'événements est défini surOFF
, les événements planifiés ne sont pas exécutés.
Pour désactiver le planificateur d'événements OFF
, exécutez la commande suivante :
SET GLOBAL event_scheduler = OFF;
La valeur OFF
est interchangeable avec 0
.
DISABLED
:Cet état signifie que le planificateur d'événements n'est pas opérationnel. Le thread ne s'exécute pas et n'apparaît pas dans la sortie de laSHOW processlist
commande.
Pour désactiver le planificateur d'événements, ajoutez l'option de ligne de commande suivante lors du démarrage du serveur :
--event-scheduler=DISABLED
Planification d'événements MySQL
Un événement est un objet de base de données contenant des instructions SQL exécutées à une heure spécifiée ou à intervalles réguliers. Les événements commencent et se terminent à une heure et une date spécifiques.
Étant donné que les événements MySQL s'exécutent à un moment spécifié par l'utilisateur, ces événements sont également appelés temporels déclencheurs . Cependant, ils ne doivent pas être confondus avec les déclencheurs MySQL, qui sont des objets de base de données exécutés en réponse à des événements spécifiques. Par conséquent, il est préférable d'utiliser le terme événements en se référant aux tâches planifiées pour éviter toute confusion.
Les sections suivantes expliquent comment créer , afficher , modifier ou supprimer événements.
Créer de nouveaux événements
Pour créer un nouvel événement, utilisez la syntaxe suivante :
CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body
Le IF NOT EXIST
L'instruction garantit que le nom de l'événement est unique pour la base de données utilisée. Spécifiez un nom d'événement unique à la place de event_name
syntaxe. Le calendrier d'exécution de l'événement est spécifié après le ON SCHEDULE
déclaration. L'événement peut être un événement ponctuel ou un événement récurrent .
Entrez des instructions SQL à la place de event_body
syntaxe après le DO
mot-clé. Le corps de l'événement peut contenir des procédures stockées, des requêtes simples ou des instructions composées. Écrire des instructions composées dans un BEGIN END
bloquer.
Planifier des événements
Les événements peuvent être planifiés pour une exécution ultérieure ou pour une exécution périodique.
Événement unique
Un événement ponctuel n'est exécuté qu'une seule fois, puis automatiquement supprimé.
Pour créer un événement ponctuel, spécifiez l'horodatage après le ON SCHEDULE
déclaration en utilisant la syntaxe suivante :
AT timestamp + [INTERVAL interval]
Les choix possibles pour intervalle sont :
- ANNÉE
- TRIMESTRE
- MOIS
- JOUR
- HEURE
- MINUTES
- SEMAINE
- DEUXIÈME
- YEAR_MONTH
- DAY_HOUR
- DAY_MINUTE
- DAY_SECOND
- HOUR_MINUTE
- HOUR_SECOND
- MINUTE_SECOND
L'horodatage doit être un DATETIME
ou TIMESTAMP
valeur dans le futur. Pour spécifier une heure exacte, ajoutez un intervalle à l'horodatage en utilisant + INTERVAL
, un entier positif et l'un des choix d'intervalle. Notez que cela s'applique uniquement lors de l'utilisation du CURRENT_TIMESTAMP
fonction.
Par exemple :
Ici, l'événement se produit deux jours après sa création et la tâche consiste à supprimer une table nommée test .
Les événements sont automatiquement supprimés après l'exécution. Si vous souhaitez enregistrer l'événement dans la base de données, ajoutez le ON COMPLETION PRESERVE
clause lors de la création de l'événement.
Événement récurrent
Un événement récurrent se produit à plusieurs reprises à un moment précis. Pour programmer un événement récurrent, utilisez la syntaxe suivante après le ON SCHEDULE
déclaration :
EVERY interval
STARTS timestamp [+ INTERVAL]
ENDS timestamp [+ INTERVAL]
Le STARTS
le mot-clé spécifie quand l'exécution de l'événement commence, tandis que le ENDS
mot-clé spécifie quand l'exécution de l'événement s'arrête.
Par exemple :
Cet événement oblige MySQL à abandonner le test de table une fois tous les six mois, en commençant immédiatement.
Vous pouvez également spécifier un intervalle pour démarrer l'événement plus tard. Par exemple :
Vous pouvez également spécifier l'heure de début et l'heure de fin de l'événement :
Cet événement oblige MySQL à supprimer la table nommée test une fois tous les six mois pendant cinq ans, à partir de cinq jours à partir de maintenant.
Afficher les événements
La commande suivante affiche tous les événements stockés dans la base de données :
SHOW EVENTS FROM database_name;
Notez que les événements ponctuels sont automatiquement supprimés après l'exécution et n'apparaissent pas dans la sortie de la commande SHOW EVENTS
sauf si vous utilisez la commande ON COMPLETION PRESERVE
clause lors de la création de l'événement.
La sortie répertorie tous les événements stockés dans la base de données spécifiée.
Modifier les événements
Utilisez le ALTER EVENT
déclaration pour modifier un événement existant :
ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]
Le event_name
doit être un événement qui existe déjà. Toutes les déclarations après ALTER EVENT
sont facultatifs, selon ce que vous souhaitez modifier. Omission de clauses dans ALTER EVENT
commande signifie qu'ils restent dans leur état précédent. Toute clause incluse signifie que les nouvelles valeurs que vous spécifiez sont appliquées.
Par exemple :
Dans cet exemple, nous avons renommé l'événement et modifié son instruction SQL.
Supprimer des événements (supprimer un événement)
Pour supprimer (supprimer) un événement, utilisez la syntaxe suivante :.
DROP EVENT [IF EXISTS] event_name;
Par exemple :
Cette action supprime définitivement l'événement de la base de données.
Utilisation de IF EXISTS
l'instruction émet un avertissement si un tel événement n'existe pas :
Limitations des événements MySQL
Certaines limitations doivent être prises en compte lors de l'utilisation des événements MySQL. Certains d'entre eux sont :
- Les événements ne peuvent pas renvoyer un ensemble de résultats. La sortie est dirigée vers dev/null, et l'événement échoue ou réussit sans avertir l'utilisateur.
- Les noms d'événements ne sont pas sensibles à la casse. Deux événements ne peuvent pas avoir le même nom avec une casse différente.
- Les événements ne peuvent pas être programmés au-delà du 19 janvier 2038 - le maximum pouvant être représenté à l'époque Unix.
- Les événements ne peuvent pas être créés, supprimés ou modifiés par un autre programme, déclencheur ou événement stocké.
- Les événements ne peuvent pas créer, supprimer ou modifier des programmes ou des déclencheurs stockés.
- Les intervalles
MONTH
,YEAR_MONTH
,QUARTER
, etYEAR
sont résolus en mois. Tous les autres intervalles sont résolus en secondes. - Il peut y avoir deux événements avec le même horaire, mais il n'y a aucun moyen de forcer un ordre d'exécution.
- Un événement s'exécute toujours avec des privilèges de définition. Le thread exécute l'événement en agissant en tant qu'utilisateur qui a créé l'événement, avec les privilèges de cet utilisateur. Notez que la suppression d'un utilisateur ne supprime pas les événements qu'il a créés.
- Les événements ne modifient pas le nombre d'exécutions d'une instruction, ce qui signifie qu'il n'y a aucun effet sur
SHOW STATISTICS
commande. - Le délai maximal d'exécution d'un événement est de deux secondes. Cependant, les information_schema.events le tableau affiche toujours l'heure exacte d'exécution de l'événement.
- Utilisez des variables définies par l'utilisateur au lieu de références à des variables locales dans des instructions préparées à l'intérieur d'une routine stockée.
- Le nombre d'appels récursifs est limité à
max_sp_recursion_depth
. Si cette variable est 0, qui est la valeur par défaut, la récursivité est désactivée. - Utilisez le
START TRANSACTION
déclaration au lieu deBEGIN WORK
, depuisBEGIN WORK
est traité comme le début duBEGIN END
bloquer. - Toute autre limitation des procédures stockées s'applique également aux événements.