如何在mysql中调度存储过程

ocebsuys  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(274)

我有这个存储过程。例如,我如何以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
hjzp0vay

hjzp0vay1#

我使用了这个查询,它对我有效:

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

ds97pgxw2#

如果您对db解决方案持开放态度:您可以设置一个cron作业,该作业运行一个脚本,该脚本本身将调用该过程。

x6yk4ghg

x6yk4ghg3#

要创建cronjob,请执行以下步骤:
运行这个命令:设置全局事件调度程序=on;
如果错误1229(hy000):变量“event\u scheduler”是全局变量,应使用set global:important设置
只能在服务器启动时将事件计划程序设置为禁用。如果事件调度程序处于打开或关闭状态,则无法在运行时将其设置为禁用。另外,如果事件调度程序设置为“启动时禁用”,则无法在运行时更改事件调度程序的值。
要禁用事件计划程序,请使用以下两种方法之一:
作为启动服务器时的命令行选项:

--event-scheduler=DISABLED

在服务器配置文件(my.cnf或windows系统上的my.ini)中:包括服务器将读取的行(例如,在[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();
j91ykkif

j91ykkif4#

您可以使用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();

相关问题