MySQL event is not running after an interval - mysql

I have created an event in MySQL using this query:
delimiter $$
create event update_usability_score
on schedule every 1 day
starts '2013-01-07 18:22:00'
do
begin
insert into table_name(pk_id,name) values(1,"testing");
update table table_name set name = 'Not testing' where name like '%testing%';
end//
delimiter ;
When I run this for 1st time it's working fine and not showing any error. As I queried this event will run every day. But it is not running everyday.
When I check with this:
select name, last_executed from mysql.event;
it is showing the start date. Means it is not running everyday.
How to run this event everyday? Anything I have missed in the query?
Please help to solve this problem, thanks in advance.

You need to set ON COMPLETION PRESERVE option:
CREATE EVENT update_usability_score
ON SCHEDULE EVERY 1 DAY
STARTS '2013-01-07 18:22:00'
ON COMPLETION PRESERVE
DO
BEGIN
...
END
From the event documentation:
Normally, once an event has expired, it is immediately dropped. You can override this behavior by specifying ON COMPLETION PRESERVE. Using ON COMPLETION NOT PRESERVE merely makes the default nonpersistent behavior explicit.

This particular event would fail because the very first query in the event would fail if you would run it second time as id 1 would be already in the database.

Related

MySql Event scheduler is not running

Below is the Event which I have written to be executed every day. I ran the SET GLOBAL event_scheduler = ON; before creating the event still it excutes only first day but from next day onwards it will not run.
Is there anything wrong in this query?
DELIMITER $$
ALTER DEFINER=`root`#`localhost` EVENT `Event1` ON SCHEDULE EVERY 1 DAY STARTS '2017-03-15 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO CALL UpdateLeaves()$$
DELIMITER ;
...ON COMPLETION NOT PRESERVE...
change to
...ON COMPLETION PRESERVE...

while using event scheduler in mysql it's working only one time

I am using mysql workbench6.3.7. I used event scheduler to execute the query everyday morning 9 o'clock I have used the following query
delimiter $$
create event eventtable
on schedule every '1' day
starts '2016-11-25 16:00:00'
do
begin
<statement>
end;
$$;
but it's working only one day it's not working daily.What am I missing??.Should i have to execute the query daily? Should I have to on the global scheduler daily? Please help me with this.
Thank you,
Jen
i have created following event for myself,That's working fine.look at this
CREATE DEFINER=`developer`#`%` EVENT `event_final_report_horn` ON SCHEDULE EVERY 2 MINUTE STARTS '2016-09-20 12:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT 'Event generates horn final reports after completion of testing' DO BEGIN
if current_Time>='04:00:00' then
CALL hero_final_report_process_horn_data();
end if;
end

Issue setting event to clear columns in my sql

I am trying to create an event (ClearTimes) in a mysql database (edata), to run every 24 hrs at 11pm, that clears 2 columns (Shift, Lunchtime). This is what I typed to create the event:
DELIMITER $$
CREATE
EVENT `ClearTimes`
ON SCHEDULE EVERY 1 DAY STARTS '2015-12-05 23:00:00'
DO BEGIN
-- clear "Shift" column
UPDATE edata SET shift = '';
-- clear "Lunchtimes" column
UPDATE edata SET Lunchtime = '';
END $$
DELIMITER ;
The issue is that the event ran on the 5th at 11pm, and then never ran again. I of course want the event to run every 24 hours # 11pm. Any Ideas?
Finally after all this time I figured out the issue, some one was running a restart on the computer for updates so the pc was never on when it was trying to clear... changed the time and it has been working great.
Sorry for the confusion.

Delete record with Event Scheduler

Just wanted to ask if this Event Scheduler works, also if once ran, it will continue to run as long as mySQL is running as a service?
SET GLOBAL event_scheduler = ON;
CREATE EVENT deleteVistors
ON SCHEDULE EVERY 1 DAY STARTS'2013-08-13 04:00:00'
DO
DELETE FROM tblwhitelist WHERE description = 'Vistors';
Also would this need a delimiter? I'm still unsure to what it actually is!
Hope you can help!
http://dev.mysql.com/doc/refman/5.1/en/create-event.html
Not using ENDS means that the event continues executing indefinitely.
CREATE EVENT deleteVistors
ON SCHEDULE EVERY 1 DAY STARTS '2013-08-13 04:00:00'
-- !!! no *END*: will continue until you explicitly drop the event
DO
DELETE FROM tblwhitelist WHERE description = 'Vistors';
For the second question:
Also would this need a delimiter?
MySQL use the semi-colon as statement delimiter. For multi-line statements (BEGIN ... END, etc.) this could be confusing for your MySQL client as the ; might appears inside those multi-line statements.
Here, you have only one ; so you don't have to bother with that.

MySql Schedule event

I want to insert data in a table at the beginning of every month, I though to use mysql event. But someone told me that if I miss that event (Mean if my server is down in scheduled date/time then mysql will no rerun that event after getting online, not sure) then mysql will not rerun it again.
So I have created a table celled event_balance where event will be logged. Then I created a event called balance_update_check which will run every hour and check if event was executed for this month, if not then it will call a procedure which will create rows for this month and then update table event_balance with event_type and date.
But I am not satisfied with this, please check my codes and tell me is it OK? if possible provide a better solution. Thanks for you time.
Event balance_update_check
CREATE
EVENT `balance_update_check`
ON SCHEDULE EVERY 1 Hour
DO BEGIN
set #check_if_cont_doc:= (SELECT count(*) FROM event_balance WHERE event_type = 'doctor_contract' and monthname(event_balance.date) = monthname(CURDATE()));
set #check_if_cont_other:= (SELECT count(*) FROM event_balance WHERE event_type = 'other_contract' and monthname(event_balance.date) = monthname(CURDATE()));
IF (#check_if_cont_doc = 0) Then
call proc_leave_bal_doc_cont();
Insert into event_balance (event_type,`date`) values('doctor_contract',CURDATE())
END IF;
IF (#check_if_cont_other = 0) Then
call proc_leave_bal_other_cont();
Insert into event_balance (event_type,`date`) values('other_contract',CURDATE())
END IF;
END //
You want to make sure that the event_scheduler is set to ON in your my.cnf file. Head over to your my.cnf file (or my.ini file if you are using Windows) and either comment out the event_scheduler=DISABLED or set event_scheduler=ON. Then restart. This is make sure that your events run after a server reboot. There is some more info about it here:dev.mysql.com/doc/refman/5.5/en/events-configuration.html