Подтвердить что ты не робот

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

Ответ 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, выполните следующие действия:

  • выполните следующую команду: SET GLOBAL event_scheduler = ON;

  • Если ERROR 1229 (HY000): переменная 'event_scheduler' является GLOBAL переменная и должна быть установлена ​​с помощью SET GLOBAL:  mportant

Можно назначить планировщик событий 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, который сам вызовет процедуру.