如何利用mysql 事件定时清空表调度器定时从mysql中删除数据

怎么样对MySQL中的事件进行调度
ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。
COMMENT 'comment': 定义事件的注释。
3.更改事件的语法
&[DEFINER = { user | CURRENT_USER }]
&EVENT event_name
&[ON SCHEDULE schedule]
&[ON COMPLETION [NOT] PRESERVE]
&[RENAME TO new_event_name]
&[ENABLE | DISABLE | DISABLE ON SLAVE]
&[COMMENT 'comment']
&[DO event_body]
4.删除事件的语法
DROP EVENT [IF EXISTS] event_name
在Do子句中实现事件的具体逻辑,几乎所有可以在存储程序中运行的MySQL语句都可以在event中使用。
1)简单SQL示例:
CREATE EVENT e_hourly
&ON SCHEDULE
& EVERY 1 HOUR
&COMMENT &Clears out sessions table each hour.'
& DELETE FROM site_activity.
2)复杂SQL示例:
delimiter |
CREATE EVENT e
&ON SCHEDULE
& EVERY 5 SECOND
& DECLARE v INTEGER;
& DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
& SET v = 0;
& WHILE v& 5 DO
&& INSERT INTO t1 VALUES (0);
&& UPDATE t2 SET s1 = s1 + 1;
&& SET v = v + 1;
& END WHILE;
3)Do子句中SQL的限制
基本上Do中可以使用任何在存储程序(Stored Routine)中允许的SQL语句,而存储程序中有些限制,event还有些额外的限制。
Stored Routine中如下语句不允许:
LOCK TABLES/UNLOCK TABLES
LOAD DATA与LOAD TABLE
支持动态SQL(PREPARE, EXECUTE, DEAALOCATE PREPARE)!但是PREPARE本身有些语句不允许执行。
INSERT DELAYED不会生效
EVENT的限制:
如果Do子句中包含ALTER EVENT子句,虽然能够创建,但是运行时会出错。
不要在Do子句中使用SELECT或SHOW这样仅仅是查询的语句,因为其输出无法从外部获取到。可以使用SELECT & INTO 这样的形式将查询结果保存起来。
5.查看EVENT
有如下方式可以查看event的信息:
mysql.event
information_schema.events
show events
show create event
三、event schedule其他注意点
MySQL保存了事件创建时的sql_mode作为其运行时的sql_
如果在一个调度区间内任务没有处理完成,新的调度依然会生成,这样就会出现同时又多个任务在运行的情况。如果要避免多个任务同时存在,可以使用GET_LOCK()函数或者行锁、表锁。
四、 Mysql事件实战
创建一个用于测试的test表:
CREATE TABLE `test` (
&`id` int(11) NOT NULL AUTO_INCREMENT,
&`t1` datetime DEFAULT NULL,
&`id2` int(11) NOT NULL DEFAULT '0',
&PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8
&O 创建一个每隔3秒往test表中插入一条数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES('',NOW());
&O 创建一个10分钟后清空test表数据的事件
CREATE EVENT IF NOT EXISTS test
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO TRUNCATE TABLE test.
&O 创建一个在 00:00:00时刻清空test表数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test
ON SCHEDULE
AT TIMESTAMP ' 00:00:00'
DO TRUNCATE TABLE
&O 创建一个从日21点45分开始到10分钟后结束,运行每隔3秒往test表中插入一条数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND
STARTS ' 21:49:00'
ENDS ' 21:49:00'+ INTERVAL 10 MINUTE
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES('',NOW());
通常的应用场景是通过事件来定期的调用存储过程,下面是一个简单的示例:
创建一个让test表的id2字段每行加基数2的存储过程,存储过程代码如下:
DROP PROCEDURE IF EXISTS test_
DELIMITER //
CREATE PROCEDURE test_add()
DECLARE 1_id INT DEFAULT 1;
DECLARE 1_id2 INT DEFAULT 0;
DECLARE error_status INT DEFAULT 0;
DECLARE datas CURSOR FOR SELECT id FROM
DECLARE CONTINUE HANDLER FOR NOT FOUND SET error_status=1;
FETCH datas INTO 1_
SET 1_id2=1_id2+2;
UPDATE test SET id2=1_id2 WHERE id=1_
FETCH datas INTO 1_
UNTIL error_status
END REPEAT;
事件设置 00:00:00时刻开始运行,每隔1调用一次存储过程,40天后结束,代码如下:
CREATE EVENT test ON SCHEDULE EVERY 1 DAY
STARTS ' 00:00:00'
ENDS ' 00:00:00'+INTERVAL 40 DAY
ON COMPLETION PRESERVE DO
CALL test_add();
【声明】:黑吧安全网()登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱,我们会在最短的时间内进行处理。
上一篇:【】【】使用mysql事件调度器定时删除binlog_MySQL_ThinkSAAS
使用mysql事件调度器定时删除binlog
使用mysql事件调度器定时删除binlog
内容来源: 网络
MySQL的事件调度器可以精确到每秒钟执行一个任务,对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。先查看是否启动这个功能: 代码如下:SELECT @@event_在使用这个功能之前必须确保 event_scheduler已开启,可执行: 代码如下:SET GLOBAL event_scheduler = 1;或我们可以在配置my.cnf文件 中加上event_scheduler = 1然后来对 binlog 的删除写一个事件.设置天检查,并删除每 4 天前的 binlog 文件. 代码如下:CREATE EVENT purge_binlog ON SCHEDULE EVERY 1 DAY DO PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 4 DAY);查看定时事件可以,通过执行如下的语句: 代码如下:SELECT *
FROM information_schema.EVENTS; 可以看到相应的库中的作业信息,其中LAST_EXECUTED字段会反映出相应的作业最近一次的执行时间。
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信MySQL 事件调度器的操作流程,MYSQL教程,MYSQL案例,MYSQL实例
     本站短域名:珠江路.cn、zjlu.net
        
     
          
您的位置: &&
&& MySQL 事件调度器的操作流程
MySQL 事件调度器的操作流程
  本文标签:  
  下面的文章主要介绍的是 调度器(Event Scheder),我们这次试验的是在 MySQL
的中进行的,其新增另一个相关,可以用来作为一个新的调度器&&。
  部分原先只能用任务调度器才能完成的定时功能&&。
  事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能&&。例如,Linux 中的 crontabe 只能精确到每分钟执行一次,而 MySQL事件调度器则可以实现每秒钟执行一个任务,这在一些对实时性要>求较高的环境下就非常实用了&&。
  事件调度器是定时触发执行的,在这个角度上也可以称作是"的"&&。触发器只是针对某个表产生的事件执行一些,而事件调度器则是在某一个(间隔)执行一些语句&&。
  事件是由一个特定的来的,也就是所谓的"事件调度器"&&。启用MySQL 事件调度器后,拥有 SUPER 的账户执行
PROSST 就可以看到这个线程了&&。通过设定全局event_scheduler 的值即可的控制事件调度器是否启用&&。
(:local:)test&SET&GLOBAL&event_scheduler&=&ON; &(root:localhost:)test&show&process\G&
  4. row
Id:&46147 &User:&event_scheduler &Host:&localhost &db:& &Command:&Daon &Time:&1 &State:&Waiting&on&empty&queue &Info:&NULL&&
如上,该线程的是 event_scheduler&&。
  二、案例
  实现MySQL 事件调度器本,案例是利用 event scheduler 的,每秒钟调用一次过程,用于 SLAVE 是否正常运行,如果发现 SLAVE 了,忽略 0 次,然后重新 SLAVE&&。
delimiter&// &create&&`Slave_Monitor`() &begin &SELECT&VABLE_VALUE&INTO&@SLAVE_STATUS& &FROM&informon_schema.GLOBAL_STATUS& &WHERE&VARIABLE_E=SLAVE_RUNNING; &IF&(ON&!=&@SLAVE_STATUS)&THEN &SET&GLOBAL&SQL_SLAVE_SKIP_COUNTER=0; &SLAVE&START; &END&IF; &&// &delimiter&; &
  由于存储过程中无法调用类似 SHOW SLAVE STATUS 这样的语句,因此无法得到确切的错误信息和,不能进一步的 SLAVE 停止的各种情况&&。
  接着,创建任务
CREATE&EVENT&IF&NOT&EXTS&`Slave_Monitor` &ON&SCHELE&EVERY&5&SECOND &ON&COMET&PRESERVE &DO &C&Slave_Monitor();&&
  创建了一个任务,每 5秒钟 执行一次,任务结束后依旧保留该任务,而不是&&。当然了,在本例中的任务不会结束,除非将它禁止了&&。
  如果在运行中想要临时关闭一下某个任务,执行 AR EVENT 语句即可:
(root:localhost:)test&alter&event&`Slave_Monitor`&ON& &COMPLETION&PRESERVE&DIBLE; &(root:localhost:)test&alter&event&`Slave_Monitor`&ON& &COMPLETION&PRESERVE&ENABLE;&
  以上的相关内容就是对MySQL 事件调度器的介绍,望你能有所收获&&。
数据库开发
产品库推荐
All Rights Reserved.
珠江路在线版权所有
 |  |  | 

我要回帖

更多关于 mysql 事件调度 的文章

 

随机推荐