MySQL Events are tasks that run according to a schedule. Therefore, we sometimes refer to them as scheduled events. Basically an event is a named database object containing one or more SQL statements to be executed at one or more regular intervals, beginning and ending at a specific date and time. Conceptually, this is similar to the idea of the Unix crontab (also known as a “cron job”) or the Windows Task Scheduler.
Here is the summary of Event object features:
- An event is uniquely identified by its name and the schema to which it is assigned
- An event performs a specific action according to a schedule. This action consists of an SQL statement, which can be a compound statement in BEGIN .. END;
- An event's timing can be either one-time or recurrent. A one-time event executes one time only. A recurrent event repeats its action at a regular interval.
For further details, visit :http://dev.mysql.com/doc/refman/5.1/en/events-overview.html
Let's create an Event object to increment 'counter' column of event_test table every minute:
No it has not worked, because event scheduler thread is not ON. The global event_scheduler system variable determines whether the Event Scheduler is enabled and running on the server.
To enable Event Scheduler use this sql:
For more information about event scheduler, see http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html
When the Event Scheduler is ON, the event scheduler thread is listed in the output of SHOW PROCESSLIST as a daemon process, and its state is represented as shown here:
Lets check the status of 'counter' after truning event Scheduler ON
To disable my_event, use this ALTER EVENT statement:
Here is the summary of Event object features:
- An event is uniquely identified by its name and the schema to which it is assigned
- An event performs a specific action according to a schedule. This action consists of an SQL statement, which can be a compound statement in BEGIN .. END;
- An event's timing can be either one-time or recurrent. A one-time event executes one time only. A recurrent event repeats its action at a regular interval.
For further details, visit :http://dev.mysql.com/doc/refman/5.1/en/events-overview.html
Let's create an Event object to increment 'counter' column of event_test table every minute:
mysql> CREATE EVENT my_event ON SCHEDULE EVERY 1 MINUTE DO UPDATE event_test set counter=counter+1; Query OK, 0 rows affected (0.00 sec)Metadata about events can be obtained as follows:
mysql> SHOW CREATE EVENT my_event\G *************************** 1. row *************************** Event: my_event sql_mode: time_zone: SYSTEM Create Event: CREATE EVENT `my_event` ON SCHEDULE EVERY 1 MINUTE STARTS '2012-03-06 16:46:01' ON COMPLETION NOT PRESERVE ENABLE DO update event_test set counter=counter+1 character_set_client: latin1 collation_connection: latin1_swedish_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)
Since this is a repeating event and may not terminate within its scheduling interval, the result may be multiple instances of the event executing simultaneously. Which is undesirable, use GET_LOCK() function or LOCK TABLE to avoid this.Check if the 'my_event' has actually worked
mysql> SELECT SLEEP(60); SELECT * FROM event_test; +-----------+ | SLEEP(60) | +-----------+ | 0 | +-----------+ 1 row in set (1 min 0.01 sec) +---------+ | counter | +---------+ | 0 | +---------+ 1 row in set (0.00 sec)
mysql> select @@GLOBAL.event_scheduler ; +--------------------------+ | @@GLOBAL.event_scheduler | +--------------------------+ | OFF | +--------------------------+ 1 row in set (0.00 sec)
mysql> set GLOBAL event_scheduler =ON; Query OK, 0 rows affected (0.00 sec)
When the Event Scheduler is ON, the event scheduler thread is listed in the output of SHOW PROCESSLIST as a daemon process, and its state is represented as shown here:
mysql> SHOW PROCESSLIST; | 43 | event_scheduler | localhost | NULL | Daemon | 35 | Waiting for next activation | NULL | +----+-----------------+-----------+------+---------+------+
mysql> SELECT SLEEP(60); SELECT * FROM event_test; +-----------+ | SLEEP(60) | +-----------+ | 0 | +-----------+ 1 row in set (1 min 0.00 sec) +---------+ | counter | +---------+ | 1 | +---------+ 1 row in set (0.00 sec) mysql> SELECT SLEEP(60); SELECT * FROM event_test; +-----------+ | SLEEP(60) | +-----------+ | 0 | +-----------+ 1 row in set (1 min 0.01 sec) +---------+ | counter | +---------+ | 2 | +---------+ 1 row in set (0.00 sec)
ALTER EVENT my_event DISABLE;
It was just a simple example to show,
that how to automate database task inside MySQL server.
Scheduler data binding
ReplyDeleteGood Article. Thank you
ReplyDeletegud article and its very useful
ReplyDeletegud article and its very useful
ReplyDelete