为什么mysql事件调度无法在数据库localhost中工作?

时间:2016-06-15 00:27:58

标签: mysql events

我跑了:main.cpp

我的事件调度程序脚本是这样的:

test.cpp

它没有更新数据库localhost中的值

即使在数据库服务器中,它也是一个更新

解决我问题的任何解决方案?

谢谢

1 个答案:

答案 0 :(得分:3)

请查看以下内容。

发出select CURRENT_TIMESTAMP;

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

换句话说,做一些侦察。事件因没有用户界面而无声地成功或失败。

运行一些命令,如:

show variables where variable_name='event_scheduler';

- 目前关闭(或可能开启)

在创建过程中指定活动的开始时间,并指定ON COMPLETION PRESERVE,例如

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 ;

启用事件处理程序:

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

确认:

show variables where variable_name='event_scheduler';

按数据库名称检查特定数据库中所有事件的状态:

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

enter image description here

在当前选定的数据库中按名称禁用或启用某个事件:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

最后但并非最不重要的是,当我编写新事件时,我总是首先在事件语句中添加日志表(带有insert语句和日期时间now())。那样的话,我知道它被解雇了,像你这样的where子句中的数据也许并没有给我一个错误的读物。

我的意思是我到处疯狂。最初,我稍后再说出来:

    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

请记住所有实际目的(除了你真正关心你的问题的表格)...我EvtsLog是你作为活动程序员和你最好的朋友的唯一用户界面。

请查看手册页,了解ON COMPLETION PRESERVE的含义以及其他内容。