Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que a programação de eventos do mysql não está funcionando no banco de dados localhost?


Olhe para o seguinte.

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

Em outras palavras, faça algum reconhecimento. Os eventos são bem-sucedidos ou falham silenciosamente, pois não possuem interface de usuário.

Execute alguns comandos como:
show variables where variable_name='event_scheduler';

-- atualmente DESLIGADO (ou pode estar LIGADO)

Especifique a hora de início do seu evento durante a criação e especifique ON COMPLETION PRESERVE tal como
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 ;

Ative o manipulador de eventos:
SET GLOBAL event_scheduler = ON;  -- turn her on and confirm below

Confirme:
show variables where variable_name='event_scheduler';

Examine o status de todos os eventos em um banco de dados específico pelo nome do banco de dados:
show events from stackoverflow; -- note stackoverflow is my database name 



Desabilite ou habilite um determinado evento por nome no banco de dados selecionado atual:
ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

E por último, mas não menos importante, quando estou escrevendo um novo evento, sempre adiciono inicialmente nas instruções de evento para registrar em uma tabela de log (com uma instrução de inserção e uma data e hora de now() ). Dessa forma, eu sei que ele disparou e que os dados em uma cláusula where como a sua talvez não estejam me dando uma leitura errada da coisa toda.

E eu quero dizer que eu enlouqueço em todo o lugar. Inicialmente, então eu remito mais tarde:
    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

Lembre-se para todos os propósitos práticos (exceto talvez sua tabela que você realmente se importa com sua pergunta) ... que EvtsLog minha é sua única interface de usuário como programador de eventos e seu melhor amigo.

Veja na página do manual o que ON COMPLETION PRESERVE significa, bem como outras coisas.