自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作。事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里
开启event_scheduler
mysq> SET GLOBAL event_scheduler = 1;
# 或
mysql> SET GLOBAL event_scheduler = ON;
也可以在配置文件中添加设置 : event_scheduler=1
也可以直接在启动命令加上 : --event_scheduler=1
mysql> SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.01 sec)
# 或
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON |
+-------------------+
1 row in set (0.00 sec)
# 或
mysql> SHOW PROCESSLIST;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| 6 | root | localhost | NULL | Query | 0 | starting | SHOW PROCESSLIST |
| 7 | event_scheduler | localhost | NULL | Daemon | 81 | Waiting on empty queue | NULL |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)
实际遇到问题,数据日志单表过大需要定时删除30天前数据
create event myevent_log1
on SCHEDULE every 1 DAY
STARTS '2020-05-29 22:00:00'
do delete from hj_bjjkb.gjjk_log1 where date(from_unixtime(request_time/1000))<DATE_SUB(CURDATE(), INTERVAL 30 DAY);
myevent_log1:事件名称
every 1 day:轮训天数(每天执行一次)
starts '2020-05-29 22:00:00':开始执行时间(第一次执行时间)
do后面具体跟操作,hj_bjjkb.gjjk_log1库名和表明,request为13位(毫秒)的时间戳
借鉴连接:https://blog.csdn.net/chenshun123/article/details/79677193