sql >> Databasteknik >  >> RDS >> Mysql

Varför mysql händelseschema fungerar inte i databasen localhost?

Titta på följande.

Ge en select CURRENT_TIMESTAMP; eller

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

Med andra ord, gör lite rekon. Händelser lyckas eller misslyckas tyst eftersom de inte har något användargränssnitt.

Kör några kommandon som:

show variables where variable_name='event_scheduler';

-- för närvarande AV (eller det kan vara PÅ)

Ange starttiden för ditt evenemang under skapandet och ange ON COMPLETION PRESERVE som

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 ;

Slå på händelsehanteraren:

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

Bekräfta det:

show variables where variable_name='event_scheduler';

Undersök statusen för alla händelser i en viss databas efter databasnamn:

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

Inaktivera eller aktivera en viss händelse efter namn i den aktuella valda db:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

Och sist men inte minst, när jag skriver en ny händelse, lägger jag alltid till initialt i händelsesatserna för att logga till en loggtabell (med en insert-sats och en datetime på now() ). På så sätt vet jag att det avfyrades och att data i en where-klausul som din kanske inte ger mig en felaktig läsning av det hela.

Och jag menar att jag blir galen överallt. Till en början, sedan tar jag bort det senare:

    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

Kom ihåg för alla praktiska ändamål (förutom kanske ditt bord du verkligen bryr dig om från din fråga) ... att EvtsLog av mig är ditt enda användargränssnitt som evenemangsprogrammerare och din bästa vän.

Titta på manualsidan för vad OM SLUTFÖRANDEBEVARET betyder såväl som andra saker.




  1. Upprätthålla ett grupperat löpande MAX (eller MIN)

  2. Formaterar datum till läsbart format

  3. Kerberos för SQLyog av MariaDB Connector/C

  4. Hur man skapar kapslade tabeller med användardefinierad datatyp i Oracle Database