web-dev-qa-db-fra.com

L'événement Mysql ne fonctionne pas

J'ai ajouté l'événement de test simple suivant sur ma base de données mysql via phpmyadmin:

CREATE DEFINER=`root`@`localhost` EVENT `my_event` 
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-27 00:00:00' 
ON COMPLETION NOT PRESERVE ENABLE DO 
BEGIN
    UPDATE `test` SET `name`="z";
END

Mon environnement est mac + MAMP Pro. Je m'attends à changer toutes les lignes de ma table 'test' portant le nom 'z' dans une minute. Mais ne pas arriver ainsi.

Dois-je ajouter quelque chose de plus pour que mes événements commencent à fonctionner? 

Sortie de "SHOW PROCESSLIST": enter image description here

Merci.

39
Rana

Les événements sont exécutés par le planificateur, qui n'est pas démarré par défaut . Il est possible de vérifier si SHOW PROCESSLIST est lancé. Sinon, lancez la commande

 SET GLOBAL event_scheduler = ON;

pour l'exécuter.

103
Jacopofar

Pour ceux qui se demandent comment l'activer par défaut au démarrage, ajoutez ce qui suit dans votre fichier de configuration (my.ini, my.cnf):

#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1

Le redémarrage du service est requis dans ce cas. Si vous souhaitez une perturbation minimale, ajoutez ceci au fichier de configuration, puis exécutez le code SQL:

SET GLOBAL event_scheduler = ON;

De cette façon, il fonctionnera pour le processus en cours, et si le serveur est redémarré, il fonctionnera toujours. 

Notez que cela ne fonctionne pas si event_scheduler a été désactivé. Dans ce cas, la seule option consiste à redémarrer le service.

5
techdude

Vérifiez si event_scheduler est activé - exécutez la commande suivante:

SHOW PROCESSLIST;

Il va sortir une table/entrées, vous devez chercher une entrée avec User event_scheduler, et Commande Daemon:

Id           User         Host      db  Command Time    State            Info
22870   event_scheduler localhost   \N   Daemon  23    Waiting for next activation  \N

OU, vous pouvez également vérifier en utilisant la commande suivante:

SELECT @@global.event_scheduler;

Le résultat devrait être ON, sinon, désactivez-le (obtiendra 0 pour la commande), comme indiqué dans la section suivante.


Si vous ne possédez aucune entrée de ce type (comme ci-dessus), vous pouvez démarrer le planificateur d'événements à l'aide de la commande suivante:

 SET GLOBAL event_scheduler = ON;

Une fois cela fait, vous pouvez vérifier s'il a été exécuté correctement à l'aide de la commande SHOW PROCESSLIST, comme mentionné ci-dessus.

4
Nabeel Ahmed

Si vous voulez que votre event_scheduler démarre automatiquement à chaque redémarrage du serveur mysql, placez-le dans la section [mysqld] du fichier my.ini ou my.cnf que vous trouverez dans /etc/mysql

[mysqld]

# turning on event_scheduler  
event_scheduler=ON

redémarrez mysql pour vérifier s'il est en cours d'exécution (dans le terminal en ligne de commande!)

Sudo service mysql restart

puis vérifiez votre liste de processus

SHOW PROCESSLIST

vous pouvez vérifier si vos événements sont en cours en vérifiant la dernière fois qu'ils ont eu lieu

SELECT * FROM INFORMATION_SCHEMA.events
3
tony gil

Je viens de comprendre que sur MariaDB, après avoir ajouté un événement (dans mon cas, c'était le premier), vous devez redémarrer le planificateur d'événements. 

 SET GLOBAL event_scheduler = OFF;

et alors

 SET GLOBAL event_scheduler = ON;

faire en sorte que le planificateur passe à l'état "en attente d'activation".

0
GoodbyeKitty

Je voudrais juste ajouter à ce fil. J'ai vidé ma base de données sur un autre serveur et, par conséquent, l'auteur de la définition de mon événement ne disposait d'aucun tel droit pour l'utilisateur. J'ai mis à jour mon créateur avec

ALTER DEFINER='root'@'localhost' EVENT event.name COMMENT '';

Assurez-vous que votre définisseur dispose des bons privilèges.

0
Daniel James Canil

N'oubliez pas d'ajouter dans ' Commit ', après ' DO BEGIN ' ou 'DO'. Ça marche pour moi après ça.

0
Lownc