Как запланировать хранимую процедуру в MySQL
У меня есть эта хранимая процедура. Как я могу запустить это, например, с интервалом в 5 секунд? Как обычная процедура для исключения данных с меткой времени старше одного дня?
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
Ответы
Ответ 1
Вы можете использовать планировщик mysql для запуска его каждые 5 секунд. Вы можете найти образцы в http://dev.mysql.com/doc/refman/5.1/en/create-event.html
Никогда не использовал его, но надеюсь, что это сработает:
CREATE EVENT myevent
ON SCHEDULE EVERY 5 SECOND
DO
CALL delete_rows_links();
Ответ 2
Я использовал этот запрос, и он работал у меня:
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();
Ответ 3
Чтобы создать cronjob, выполните следующие действия:
Можно назначить планировщик событий DISABLED только при запуске сервера. Если event_scheduler включен или выключен, вы не можете установить его DISABLED во время выполнения. Кроме того, если для планировщика событий установлено значение ОТКЛЮЧЕНО при запуске, вы не можете изменить значение event_scheduler во время выполнения.
Чтобы отключить планировщик событий, используйте один из следующих двух способов:
-
Как параметр командной строки при запуске сервера:
--event-scheduler=DISABLED
-
В файле конфигурации сервера (my.cnf или my.ini в системах Windows):
включить строку, в которой он будет считаться сервером (например, в разделе [mysqld]):
event_scheduler=DISABLED
Для получения дополнительной информации прочитайте MySQL .
DROP EVENT IF EXISTS EVENT_NAME;
CREATE EVENT EVENT_NAME
ON SCHEDULE EVERY 10 SECOND/minute/hour
DO
CALL PROCEDURE_NAME();
Ответ 4
Если вы открыты для решения вне базы данных: вы можете настроить задание cron, которое запускает script, который сам вызовет процедуру.