Tareas periódicas en MySQL: Su proceso cron

MySQL tiene una feature desde la versión 5.1, el event_scheduler, que no es más que un proceso interno del motor de base de datos que se está ejecutando en segundo plano y lanza las tareas programadas. Es algo similar al cron de los sistemas GNU/Linux. Para usarlo, debemos primero habilitarlo en el fichero de configuración (/etc/mysql/my.cfg) y reiniciar el servicio.
shell> cat /etc/mysql/my.cnf
    ...
    event_scheduler = 1
shell> /etc/init.d/mysql start
O directamente en el motor de base de datos, arrancar el proceso.
mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

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

mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.00 sec)
Una vez el proceso iniciado, éste aparecerá en la lista de procesos que se están ejecutando en mysql. Muy similar al proceso cron del sistema.
mysql> show processlist;
+----+-----------------+-------+------+---------+------+--------
| Id | User            | Host  | db   | Command | Time | State
+----+-----------------+-------+------+---------+------+--------
| 21 | root            | local | NULL | Query   |    0 | NULL
| 22 | event_scheduler | local | NULL | Daemon  |   24 | Waiting
+----+-----------------+-------+------+---------+------+--------
2 rows in set (0.00 sec)
Ahora sólo queda añadir aquellas tareas repetitivas que deseamos programar. Esta sentencia puede ser casi cualquier que se nos pase por la cabeza que MySQL pueda ejecutar.
mysql> create event rep on schedule
every 30 second
on completion preserve enable
do repair table mysql.user;
Query OK, 0 rows affected (0.00 sec)

mysql> create event in on schedule
every 5 second
on completion preserve enable
do insert into test.test values (3,3);
Query OK, 0 rows affected (0.00 sec)
Tras crear los trabajos, éstos quedan almacenados en la table event, de la base de datos mysql. El proceso scheduler la consulta y realiza lo ahí descrito en el intervalo especificado. Al más puro estilo cron.
mysql> select db,name,body,interval_value from mysql.event;
+-----+----+-----------------------------------+--------------+
| db  |name|body                               |interval_value|
+-----+----+-----------------------------------+--------------+
|mysql|rep |repair table mysql.user            |           30 |
|test |in  |insert into test.test values (3,-3)|            5 |
+-----+----+-------------------------- --------+--------------+
2 rows in set (0.00 sec)
En el trabajo in, se inserta cada 5 segundos una tupla en la tabla test. Para comprobar que esto sí funciona, realizamos un count y vemos que con el tiempo, las tuplas van ascendiendo de forma automática.
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|       12 |
+----------+
1 row in set (0.00 sec)
El trabajo rep, que se ejecuta cada 30 segundos se encarga de lanzar un proceso de reparación de la tabla user en la base de datos mysql.

Más información sobre este proceso de MySQL en la página oficial.


1 comentario :

  1. Buena explicación de cómo crear eventos automáticamente en MySQL.

    ResponderEliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios