Mysql中的Events事件,以及使用时的时区问题

标题Mysql支持定时任务,即Events事件,类似于Linux中的crontab

例如创建一个event, 每天12点执行一个任务

CREATE EVENT e_ctptradeinfo
ON SCHEDULE EVERY 1 DAY
STARTS DATE_ADD(CURDATE(), INTERVAL 12 HOUR)
ON COMPLETION PRESERVE
ENABLE
DO BEGIN 
 --some sql statement or call procedure
END

要想使Events生效,还需要开启事件调度器

SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = ON;

使用set global的方式设置参数需要客户端重连mysql服务,并且在mysql服务重启后失效,要想在mysql服务重启后永久生效需要修改mysql配置文件
在MySQL的配置文件my.ini(Windows系统)/my.cnf(Linux系统)中,找对[mysqld],然后在下面添加以下代码开启事件。

[mysqld]
# 事件调度器启动状态
event_scheduler = 1

在配置文件中添加代码并保存文件后,还需要重新启动MySQL服务器才能生效。通过该方法开启事件,重启MySQL服务器后,不恢复为系统默认的状态。


除此之外,如果Events使用了STARTS或ENDS,还需要注意时区的

如上例中的12点:如果时区不对,可能会出现你想每天在北京时间12点触发事件,实际却是美国时间12点触发的。

时区的查询和设置如下:

#设置全局时区,重连生效,mysql重启失效
show variables like '%time_zone%';
set global time_zone = '+8:00';

修改 mysql 的配置文件永久设置时区。需要重启 mysql 服务后才能生效,这个对比上面的全局设置,即使服务重启也是能保持配置。配置后跟数据库所在的操作系统的时区就独立开了。

[mysqld]
default-time-zone=+08:00

这里不建议使用CST,或系统时区,否则可能出现。 如下面这种情况, Event不能在准确的时间触发。
在这里插入图片描述

CREATE EVENT e_ctptradeinfo
ON SCHEDULE EVERY 1 DAY
STARTS '2022-01-01 12:00:00.000'
ON COMPLETION PRESERVE
ENABLE

查看EVENT的时候,却变成了STARTS ‘2022-01-02 02:00:00.000’,实际执行时间还是系统时间’2022-01-01 12:00:00.000’。

究其原因,很可能是因为CST产生了歧义:

CST 时区是个非常坑的概念,因为在 mysql 里被理解为 China Standard Time(GMT+8),但是在Java里被理解为Central Standard Time (USA)(GMT-6),这就是造成坑的原因。解决办法是mysql就别用CST时区,改成 +08:00 以免造成误解。

操作MariaDB相关的命令

查看状态 systemctl status mariadb
启动命令 systemctl start mariadb
重启命令 systemctl restart mariadb
关闭命令 systemctl stop mariadb
设定开机自起 systemctl enable mariadb
关闭开机自起 systemctl disable mariadb
查看是否启动成功 ps aux|grep mariadb

Ref:
https://blog.csdn.net/pan_junbiao/article/details/86489237
https://www.jb51.net/article/167267.htm
https://blog.csdn.net/w8y56f/article/details/115445442
https://blog.csdn.net/w8y56f/article/details/115473001
https://blog.csdn.net/sundawei2016/article/details/126693367

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值