GNU/Linux >> Tutoriels Linux >  >> Linux

Guide des événements MySQL et du planificateur d'événements

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 est ON , le SHOW 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 de SHOW processlist . Si le planificateur d'événements est défini sur OFF , 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 la SHOW 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 , et YEAR 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 de BEGIN WORK , depuis BEGIN WORK est traité comme le début du BEGIN END bloquer.
  • Toute autre limitation des procédures stockées s'applique également aux événements.

Linux
  1. Guide d'exécution d'un proxy inverse pour HTTP(S), SSH et MySQL/MariaDB à l'aide de NGINX

  2. Comment configurer LogAnalyzer avec Rsyslog et MySQL

  3. Créer une nouvelle base de données et l'utiliser dans MySQL/MariaDB

  4. Installer et utiliser MySQL Workbench sur Fedora 35/34/33/32 - Guide étape par étape

  5. Top 8 des trucs et astuces en ligne de commande MySQL

Guide Docker :Déployer Ghost Blog avec MySQL et Traefik avec Docker

Recherche et remplacement MySQL

Le guide complet pour installer MySQL sur Ubuntu

Comment multi-maître MySQL avec Percona et Keepalived

Configuration et guide du chargeur de démarrage LILO Linux

Guide du débutant sur la gestion des utilisateurs MySQL