база данных — Как запланировать хранимую процедуру в 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

40

Решение

Вы можете использовать планировщик 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();
61

Другие решения

Я использовал этот запрос, и он работал для меня:

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();
11

Чтобы создать cronjob, выполните следующие действия:

  1. выполните эту команду: SET GLOBAL event_scheduler = ON;

  2. Если ОШИБКА 1229 (HY000): переменная ‘event_scheduler’ является ГЛОБАЛЬНОЙ
    переменная и должна быть установлена ​​с помощью SET GLOBAL:
    mportant

Можно установить Планировщик событий на ОТКЛЮЧЕНО только при запуске сервера. Если event_scheduler включен или выключен, вы не можете установить его на DISABLED во время выполнения. Кроме того, если при запуске планировщика событий установлено значение «ОТКЛЮЧЕНО», вы не можете изменить значение event_scheduler во время выполнения.

Чтобы отключить планировщик событий, используйте один из следующих двух методов:

  1. В качестве параметра командной строки при запуске сервера:

    --event-scheduler=DISABLED
    
  2. В файле конфигурации сервера (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();
    
6

Если вы открыты для решения вне базы данных: вы можете настроить задание cron, которое запускает скрипт, который сам вызывает процедуру.

3
По вопросам рекламы [email protected]