在 mysql 中设置 event_scheduler
Set event_scheduler in mysql
我正在尝试为公交车 table 将事件设置为开启,但它不起作用。 table 以及事件正在创建,但事件未被触发。我已经在 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");
To repeat actions at a regular interval, use an EVERY
clause. [...] For example, EVERY 6 WEEK
means “every six weeks”.
在你的情况下,如果你想每三分钟重复一次这个动作,你的事件应该按如下方式创建:
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 |
+-----------------+-------+
我正在尝试为公交车 table 将事件设置为开启,但它不起作用。 table 以及事件正在创建,但事件未被触发。我已经在 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");
To repeat actions at a regular interval, use an
EVERY
clause. [...] For example,EVERY 6 WEEK
means “every six weeks”.
在你的情况下,如果你想每三分钟重复一次这个动作,你的事件应该按如下方式创建:
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 |
+-----------------+-------+