【问题标题】:Set event_scheduler in mysql在mysql中设置event_scheduler
【发布时间】:2015-05-06 16:10:47
【问题描述】:

我正在尝试将总线表的事件设置为开启,但它不起作用。正在创建表和事件,但未触发事件。我已经在mysql-my.ini中设置了event_scheduler = ON;这一行并重启服务器。

    // Create bus table
    stt.execute("CREATE TABLE IF NOT EXISTS bus"
            + "(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"
            + "mac VARCHAR(30) NOT NULL UNIQUE,"
            + "route int(11) NOT NULL,"
            + "latitude FLOAT(10,6) NOT NULL,"
            + "longitude FLOAT(10,6) NOT NULL,"
            + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");

    stt.execute("CREATE EVENT IF NOT EXISTS  AutoDelete "
            + "ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 3 MINUTE "
            + "DO "
            + "DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 3 MINUTE)");
    stt.execute("SET GLOBAL event_scheduler = ON");

【问题讨论】:

  • 您的活动不重复。它只执行一次,从您创建它起 3 分钟。您确定在创建事件之前启用了事件调度程序吗?
  • 如何让执行每 3 分钟重复一次?以及如何启用事件调度器?我认为每件事都是通过创建事件并在 my.cnf 文件中启用后发生的。

标签: java mysql sql jdbc


【解决方案1】:

引用reference manual:

要定期重复操作,请使用EVERY 子句。 [...] 例如,EVERY 6 WEEK 的意思是“每六周”。

在你的情况下,如果你想每三分钟重复一次这个动作,你的事件应该如下创建:

CREATE EVENT IF NOT EXISTS  AutoDelete 
ON SCHEDULE EVERY 3 MINUTE
-- OPTIONAL: STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
-- OPTIONAL: ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO 
    DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 3 MINUTE)

要检查事件调度程序是否正在运行,您可以使用以下选项之一:

1. SHOW PROCESSLIST

show processlist;
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id  | User            | Host      | db   | Command | Time | State                  | Info             |
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+
| 243 | root            | localhost | NULL | Query   |    0 | NULL                   | show processlist |
| 244 | event_scheduler | localhost | NULL | Daemon  |    6 | Waiting on empty queue | NULL             |
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+

注意事件调度器是一个“DAEMON”进程

2。 SHOW VARIABLES

show global variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2012-08-15
    相关资源
    最近更新 更多