Blog de Gonzalo

EVENTOS

Los eventos en MySQL consisten en la ejecución planificada de ciertas sentencias que pueden ser llamadas a procedimientos almacenados o simples conjuntos de sentencias SQL. La ventaja de estos eventos es que se pueden configurar para planificarlos, es decir, determinar cuando se tienen que ejecutar, que intervalo de repetición tienen, etc. Como el cron de Linux o las tareas programadas de Windows.
Lo primero de todo es comprobar que el planificador de MySQL está arrancado. Para comprobarlo hay que comprobar el fichero de configuración de MySQL (my.cnf en Linux o my.ini en Window) y ver el valor de la variable event_scheduler. Estos valores pueden ser:

  • 0 (por defecto): Significa que el scheduler está parado.
  • 1: Significa que el scheduler está arrancado.
  • DISABLED: Significa que el scheduler está deshabilitado.
Para cambiar el estado del cheduler se puede modificar el fichero de configuración de MySQL y reiniciar la base de datos o modificar el valor de la variable event_scheduler ejecutando lo siguiente: SET GLOBAL event_scheduler=ON;.
Los eventos de MySQL tienen 4 bloques, por así decirlo:
  • Configuración
  • Planificación
  • Frecuencia de ejecución
  • Sentencias SQL a ejecutar
La sintaxis SQL para los eventos 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}

Un ejemplo real de un evento en MySQL sería:
CREATE EVENT
evento1
ON SCHEDULE EVERY 1 HOUR STARTS '2016-12-02 10:00:00'
DO SELECT NOW() FROM DUAL;

El nombre del evento no puede contener más de 64 caracteres y que no distingue mayúsculas de minúsculas. El evento se vincula con un determinado esquema (por ejemplo: schema_name.event_name), asi que si no se especifica ninguno en la creación del evento se tomará el esquema actual. Si el evento solo se ejecutará una vez se usara AT dentro de la planificación de ejecución del evento. Para esteblecer un intervalo de ejecución de un determinado evento se deberá utilizar EVERY.
La verdad es que no sabía que en MySQL había eventos. Siempre he recurrido al cron y ejecutando un script para hacer cualquier operación en MySQL. A partir de ahora usaré eventos.

Compartir en twitter