Como agendar um procedimento armazenado no MySQL

Eu tenho esse procedimento armazenado. Como posso executar isso por exemplo com intervalos de 5 segundos? Como uma rotina para eliminar dados com um carimbo de data e hora mais antigo que um dia?

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 

Você pode usar o agendador mysql para executá-lo a cada 5 segundos. Você pode encontrar amostras em http://dev.mysql.com/doc/refman/5.1/en/create-event.html

Nunca usei, mas espero que isso funcione:

 CREATE EVENT myevent ON SCHEDULE EVERY 5 SECOND DO CALL delete_rows_links(); 

Eu usei essa consulta e funcionou para mim:

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

Para criar um cronjob, siga estas etapas:

  1. execute este comando: SET GLOBAL event_scheduler = ON;

  2. Se ERROR 1229 (HY000): Variável ‘event_scheduler’ é uma variável GLOBAL e deve ser definida com SET GLOBAL: importante

É possível definir o Agendador de events como DESABILITADO somente na boot do servidor. Se event_scheduler estiver ON ou OFF, você não poderá configurá-lo como DISABLED no tempo de execução. Além disso, se o Agendador de events estiver definido como DISABLED na boot, você não poderá alterar o valor de event_scheduler no tempo de execução.

Para desabilitar o agendador de events, use um dos dois methods a seguir:

  1. Como uma opção de linha de comando ao iniciar o servidor:

     --event-scheduler=DISABLED 
  2. No arquivo de configuração do servidor (my.cnf ou my.ini nos sistemas Windows): inclua a linha onde ele será lido pelo servidor (por exemplo, em uma seção [mysqld]):

     event_scheduler=DISABLED 

    Leia a documentação do MySQL para mais informações.

      DROP EVENT IF EXISTS EVENT_NAME; CREATE EVENT EVENT_NAME ON SCHEDULE EVERY 10 SECOND/minute/hour DO CALL PROCEDURE_NAME(); 

Se você está aberto a uma solução fora do DB: Você pode configurar um cron job que execute um script que chama o procedimento.