modificar - Cómo programar un procedimiento almacenado en MySQL
procedimientos almacenados mysql workbench (4)
Tengo este procedimiento almacenado. ¿Cómo puedo ejecutar esto, por ejemplo, con intervalos de 5 segundos? ¿Como una rutina para eliminar datos con un sello de tiempo anterior a un día?
DROP PROCEDURE IF EXISTS `delete_rows_links`
GO
CREATE PROCEDURE delete_rows_links
BEGIN
DELETE activation_link
FROM activation_link_password_reset
WHERE TIMESTAMPDIFF(DAY, `time`, NOW()) < 1 ;
END
GO
Para crear un cronjob, sigue estos pasos:
ejecutar este comando: SET GLOBAL event_scheduler = ON;
Si ERROR 1229 (HY000): Variable ''event_scheduler'' es una variable GLOBAL y debe establecerse con SET GLOBAL: mportant
Es posible configurar el Programador de eventos en DESACTIVADO solo al inicio del servidor. Si event_scheduler está activado o desactivado, no puede configurarlo en DISABLED durante el tiempo de ejecución. Además, si el Programador de eventos está configurado en DESACTIVADO al inicio, no puede cambiar el valor de event_scheduler en el tiempo de ejecución.
Para deshabilitar el programador de eventos, use uno de los siguientes dos métodos:
Como una opción de línea de comando al iniciar el servidor:
--event-scheduler=DISABLED
En el archivo de configuración del servidor (my.cnf o my.ini en sistemas Windows): incluya la línea en la que el servidor leerá (por ejemplo, en una sección [mysqld]):
event_scheduler=DISABLED
Lea la documentation MySQL para más información.
DROP EVENT IF EXISTS EVENT_NAME; CREATE EVENT EVENT_NAME ON SCHEDULE EVERY 10 SECOND/minute/hour DO CALL PROCEDURE_NAME();
Puede usar el programador mysql para ejecutarlo cada 5 segundos. Puede encontrar muestras en http://dev.mysql.com/doc/refman/5.1/en/create-event.html
Nunca lo usé, pero espero que esto funcione:
CREATE EVENT myevent
ON SCHEDULE EVERY 5 SECOND
DO
CALL delete_rows_links();
Si está abierto a una solución fuera de la base de datos: puede configurar una tarea cron que ejecute una secuencia de comandos que llamará por sí misma al procedimiento.
Utilicé esta consulta y funcionó para mí:
CREATE EVENT `exec`
ON SCHEDULE EVERY 5 SECOND
STARTS ''2013-02-10 00:00:00''
ENDS ''2015-02-28 00:00:00''
ON COMPLETION NOT PRESERVE ENABLE
DO
call delete_rows_links();