Event Scheduler de MySQL: Que es y como funciona

Stay hungry, stay foolish

Steve Jobs

El programador de eventos de MySQL nos permite administrar la programación y ejecución de eventos en MySQL, similar a crontab de Linux o el programador de tareas de Windows con los cuales podemos ejecutar tareas repetitivas en fechas especificas o determinados intervalos de tiempo.

Los eventos son ejecutados por un hilo llamado event_scheduler por lo tanto se tiene que estar ejecutando en el servidor, los posibles valores que puede tener son:

  • OFF: El event_scheduler se encuentra detenido. No aparece en la lista de procesos de MySQL y no se ejecuta ninguno de los eventos programados.
  • ON: El event_scheduler se esta ejecutando: Aparece el la lista de procesos de MySQL y se ejecutan todos los eventos que han sido programados.
  • DISABLED: El event_scheduler se encuentra deshabilidado, No aparece en la lista de procesos de MySQL, no se ejecuta ningun evento y no se puede cambiar su estado en tiempo de ejecución.

 

Vamos a programar nuestro primer evento por lo tanto debemos de verificar que el estado de event_scheduler sea ON para ello accedemos a MySQL (Terminal o cliente) con privilegios de administrador y ejecutamos el siguiente comando:

SHOW PROCESSLIST

Si se esta ejecutando tendría que aparecernos de la siguiente forma:

Terminal
showprocesslist

En caso de que no aparezca vamos a asignar el valor ON con el siguiente comando:

 SET GLOBAL event_scheduler = ON; 

Ahora solo nos queda crear el evento que se va a ejecutar, la sintaxis para crear un evento es la siguiente:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

Lo mínimo que se necesita para crear un evento es la sentencia CREATE EVENT seguido del nombre del evento, el cual no distingue mayúsculas de minúsculas y no puede tener mas de 64 caracteres. Posteriormente la clausula ON SCHEDULE que determina cuando se va a ejecutar el evento y al final la clausula DO para indicar el código SQL que se va a ejecutar.

CREATE EVENT mievento
    ON SCHEDULE EVERY 5 MINUTE
        STARTS CURRENT_TIMESTAMP
    DO
      INSERT INTO ejemplobd.fechas(fecha) VALUES ( NOW() );

En el ejemplo anterior se crea un evento llamado mi evento el cual se ejecutará cada 5 minutos y la acción que realiza es insertar en la tabla fechas de la base de datos ejemplobd la fecha y hora actual, el campo fecha es de tipo timestamp.

Si se desea detener la ejecución del evento podemos eliminarlo con el comando DROP:

DROP EVENT mievento;

O podemos detener el event_scheduler con el siguiente comando:

SET GLOBAL event_scheduler = OFF;