Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi le programme d'événements mysql ne fonctionne-t-il pas dans la base de données localhost?

Examinez ce qui suit.

Émettez un select CURRENT_TIMESTAMP; ou

select count(*) as theCount
from customer_group
where is_status=1 and CURRENT_TIMESTAMP >= end_date;

En d'autres termes, faites de la reconnaissance. Les événements réussissent ou échouent silencieusement car ils n'ont pas d'interface utilisateur.

Exécutez des commandes telles que :

show variables where variable_name='event_scheduler';

-- actuellement désactivé (ou il pourrait être activé)

Spécifiez l'heure de début de votre événement lors de la création, et spécifiez ON COMPLETION PRESERVE comme

drop event if exists `Every_5_Minutes_QuestionUpdateImport`;
DELIMITER $$
CREATE EVENT `Every_5_Minutes_QuestionUpdateImport`
  ON SCHEDULE EVERY 5 MINUTE STARTS '2015-09-01 00:00:00'
  ON COMPLETION PRESERVE
DO BEGIN
    --
    -- all your statements go here
    -- 
END$$
DELIMITER ;

Activez le gestionnaire d'événements :

SET GLOBAL event_scheduler = ON;  -- turn her on and confirm below

Confirmez-le :

show variables where variable_name='event_scheduler';

Examinez l'état de tous les événements d'une base de données particulière par nom de base de données :

show events from stackoverflow; -- note stackoverflow is my database name 

Désactivez ou activez un certain événement par son nom dans la base de données actuellement sélectionnée :

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

Et enfin, quand j'écris un nouvel événement, j'ajoute toujours initialement dans les déclarations d'événement pour me connecter à une table de journal (avec une déclaration d'insertion et une date et heure de now() ). De cette façon, je sais qu'il s'est déclenché et que les données d'une clause where comme la vôtre ne me donnent peut-être pas une mauvaise lecture de l'ensemble.

Et je veux dire que je deviens fou partout. Au départ, puis je le rembourse plus tard :

    set filename:=concat('c:\\datavault\\stackoverflow\\app01\\batches\\processMe_',LPAD(@idToPerform, 8, '0'),'.txt');
    set logMsg:=concat("It would appear I am to process this thing: ",filename);

    insert EvtsLog(incarnationId,evtName,step,debugMsg,dtWhenLogged)
    select incarnationId,evtAlias,10,logMsg,now(); -- 10: some step somewhere in the middle

N'oubliez pas à toutes fins pratiques (sauf peut-être votre table qui vous tient vraiment à cœur d'après votre question) ... que EvtsLog est votre seule interface utilisateur en tant que programmeur d'événements et votre meilleur ami.

Regardez la page de manuel pour savoir ce que ON COMPLETION PRESERVE signifie ainsi que d'autres choses.