[转帖]【MySQL】玩转定时器_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1622 | 回复: 0   主题: [转帖]【MySQL】玩转定时器        下一篇 
Jordankevy
注册用户
等级:新兵
经验:66
发帖:4
精华:0
注册:2016-9-26
状态:离线
发送短消息息给Jordankevy 加好友    发送短消息息给Jordankevy 发消息
发表于: IP:您无权察看 2018-8-28 15:33:39 | [全部帖] [楼主帖] 楼主

1、前置条件,你需要将服务器和mysql的时间都设置成东八区,php.ini和my.cnf配置(参考上篇文章)

2、进入mysql客户端,推荐Navicat for mysql

3、首先查看是否开启了定时器的功能:

####调试MYSQL定时器 --时间设置正确情况下执行下面没影响 xzz1128 #####
set time_zone = '+8:00';
SHOW VARIABLES LIKE 'event_scheduler';##查看是否开启了event定时器功能
set GLOBAL event_scheduler = 1; //开启
select NOW();


4、提醒:虽然这里用set global event_scheduler = on语句开启了事件,但是每次重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只需要在my.cnf配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

5、首先、新建user表:

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`address` varchar(500) NOT NULL,
`addtime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


然后、新建事件,有两种事件类型,一个是间隔触发,另一个是特定事件触发。

6、下面代码中分别介绍了定时器执行持续性动作(每个时间点需要干的)和一次性动作(只用一次,用完即甩)

################# mysql持续性定时器 -xzz 1128 ##########################
DROP EVENT IF EXISTS `event_minute`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2017-11-28 15:26:00'
ON COMPLETION PRESERVE #当这个事件不会再发生的时候不会被Drop掉
ENABLE DO
BEGIN
INSERT INTO `user`(name, address,addtime) VALUES('test1','test1',now());
INSERT INTO `user`(name, address,addtime) VALUES('test2','test2',now());
DELIMITER ;
##################mysql一次性定时器#################################
DROP EVENT IF EXISTS `event_at`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2017-11-28 15:39:00'
ON COMPLETION NOT PRESERVE #当这个事件不会再发生的时候会被Drop掉
ENABLE DO
BEGIN
INSERT INTO `user`(name, address,addtime) VALUES('AT','AT',now());
DELIMITER ;


7、其他比较重要的操作语句

###关闭\打开定时器
ALTER EVENT event_minute DISABLE;
ALTER EVENT event_minute ENABLE;
###查询定时器状态
select * from mysql.event ;


8、看看效果:




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论