Logo
You
Code

Scheduler

Autor systemadmin.es - http://www.youcode.com.ar/mysql/scheduler-44

Muchas veces necesitamos realizar alguna tarea de forma automatica en nuestra base de datos, por suerte exite el Scheduler en MySql

El event scheduler es como un cron interno de MySQL. Mediante SHOW PROCESSLIST podemos verlo si esta activado:



mysql> show full processlist;
+-------+-----------------+-----------+----------+---------+--------+------------------------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+-----------------+-----------+----------+---------+--------+------------------------+-----------------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 122929 | Waiting on empty queue | NULL |
(...)
| 27686 | root | localhost | NULL | Query | 0 | NULL | show full processlist |
+-------+-----------------+-----------+----------+---------+--------+------------------------+-----------------------+
110 rows in set (0.00 sec)

Si no lo vemos mediante SHOW VARIABLES podemos ver en que estado se encuentra. Las posibilidades son:



  • DISABLED: El event scheduler no esta disponible. Podemos darle permisos al usuario mediante el siguiente GRANT:

    GRANT EVENT ON systemadmin.* TO jordi@canals.systemadmin.es;


  • OFF: El scheduler esta deshabilidado, por lo que tenemos que modificar el/etc/my.cnf para añadir la siguiente linea:

    event_scheduler=on

    o mediante SET GLOBAL:



    mysql> SET GLOBAL event_scheduler=on;
    Query OK, 0 rows affected (0.00 sec)


  • ON: El scheduler ya esta habilidado, por lo que deberiamos verlo en la lista de procesos.


Un ejemplo de proceso podría ser uno que insertara la fecha en una tabla cada 5 segunos:



mysql> create event primer_evento
-> on schedule every 5 second
-> on completion preserve
-> enable
-> do insert into cron(data) values (NOW());
Query OK, 0 rows affected (0.04 sec)


mysql> select * from cron;
+----+---------------------+
| id | data |
+----+---------------------+
| 1 | 2009-01-15 13:24:02 |
| 2 | 2009-01-15 13:24:07 |
| 3 | 2009-01-15 13:24:12 |
| 4 | 2009-01-15 13:24:17 |
| 5 | 2009-01-15 13:24:22 |
| 6 | 2009-01-15 13:24:27 |
| 7 | 2009-01-15 13:24:32 |
| 8 | 2009-01-15 13:24:37 |
| 9 | 2009-01-15 13:24:42 |
| 10 | 2009-01-15 13:24:47 |
| 11 | 2009-01-15 13:24:52 |
| 12 | 2009-01-15 13:24:57 |
| 13 | 2009-01-15 13:25:02 |
| 14 | 2009-01-15 13:25:07 |
(...)
+----+---------------------+
66 rows in set (0.00 sec)

Para consultar la sintaxis en detalle podéis verlo en el manual de MySQL 5.1 sobre el scheduler.

http://www.youcode.com.ar/mysql/scheduler-44