Mysql
 sql >> Database >  >> RDS >> Mysql

Perché la pianificazione degli eventi mysql non funziona nel database localhost?

Esamina quanto segue.

Emetti un select CURRENT_TIMESTAMP; o

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

In altre parole, fai qualche ricognizione. Gli eventi hanno esito positivo o negativo in quanto non dispongono di un'interfaccia utente.

Esegui alcuni comandi come:

show variables where variable_name='event_scheduler';

-- attualmente SPENTO (o potrebbe essere ACCESO)

Specifica l'ora di inizio del tuo evento durante la creazione e specifica ON COMPLETION PRESERVE come

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 ;

Attiva il gestore eventi:

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

Confermalo:

show variables where variable_name='event_scheduler';

Esamina lo stato di tutti gli eventi in un determinato database in base al nome del database:

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

Disabilita o abilita un determinato evento per nome nel db correntemente selezionato:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

E, ultimo ma non meno importante, quando scrivo un nuovo evento, aggiungo sempre inizialmente le istruzioni dell'evento per accedere a una tabella di registro (con un'istruzione insert e un datetime di now() ). In questo modo, so che è stato attivato e che i dati in una clausola where come la tua forse non mi danno una lettura sbagliata dell'intera faccenda.

E voglio dire che impazzisco dappertutto. Inizialmente, poi lo rimuovo in seguito:

    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

Ricorda per tutti gli scopi pratici (tranne forse il tuo tavolo a cui tieni davvero dalla tua domanda) ... che EvtsLog di mio è la tua unica interfaccia utente come programmatore di eventi e il tuo migliore amico.

Guarda la pagina del manuale per sapere cosa SU COMPLETION PRESERVE significa così come altre cose.