热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql事件

需求由于公司的项目运营了四年之久,数据量庞大,有的表已经达到了几百M,为了不影响查询效率,需要定期把一些日志老数据删除,公司负责人把之前的清理数据文档发来作为参考,发现了一些比较陌

需求

由于公司的项目运营了四年之久,数据量庞大,有的表已经达到了几百M,为了不影响查询效率,需要定期把一些日志老数据删除,公司负责人把之前的清理数据文档发来作为参考,发现了一些比较陌生的字眼,百度一看,原来是Mysql事件。

了解

熟悉linux系统的人都知道linux的cron计划任务,能很方便地实现定期运行指定命令的功能。其实Mysql事件就和Linux的cron功能一样,Mysql在5.1以后推出了事件调度器(Event Scheduler),能方便地实现 mysql数据库的计划任务,而且能精确到秒。

实践

Linux:Centos6.5,  Mysql:5.7.22

想要使用Mysql的事件功能,前提是确保服务开启,我这里是开启的。

MySQL [test]> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (1.76 sec)

如果没有开启,进入Mysql客户端,执行以下命令开启

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;

当然也可以执行以下命令关闭

SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;

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

编辑mysql的配置文件my.cnf,在[mysqld]中添加下面一行代码

[mysqld]
event_scheduler=ON

然后重启Mysql服务,进入Mysql客户端执行命令查看是否开启。确认是开启的。

# service mysqld restart --event_scheduler=ON //通过制定事件参数启动

 简单小案例测试一下

//创建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;

创建好了表之后,然后创建事件。事件类型分为两种,一个是间隔触发,另一个是特定事件触发。

事件参数说明:


  • DEFINER:创建者

  • ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);

  • ENABLE:表示系统将执行这个事件;

第一种类型:每隔一分钟插入一条数据

//创建事件
DROP EVENT IF EXISTS `event_minute`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2018-06-20 20:00:00' ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN
INSERT INTO USER(name, address,addtime) VALUES('test1','test1',now());
INSERT INTO USER(name, address,addtime) VALUES('test2','test2',now());
END
;;
DELIMITER ;

经过我将近两天的挂机测试,数据表结果,观察数据,每一分钟入库一条数据。

mysql> select * from user;
| 5248 | name2 | test2 | 2018-06-21 14:59:00 |
| 5249 | name1 | test1 | 2018-06-21 15:00:00 |
| 5250 | name2 | test2 | 2018-06-21 15:00:00 |
| 5251 | name1 | test1 | 2018-06-21 15:01:00 |
| 5252 | name2 | test2 | 2018-06-21 15:01:00 |
| 5253 | name1 | test1 | 2018-06-21 15:02:00 |
| 5254 | name2 | test2 | 2018-06-21 15:02:00 |
| 5255 | name1 | test1 | 2018-06-21 15:03:00 |
| 5256 | name2 | test2 | 2018-06-21 15:03:00 |
| 5257 | name1 | test1 | 2018-06-21 15:04:00 |
| 5258 | name2 | test2 | 2018-06-21 15:04:00 |
| 5259 | name1 | test1 | 2018-06-21 15:05:00 |
| 5260 | name2 | test2 | 2018-06-21 15:05:00 |
+------+-------+---------+---------------------+

第一种类型:特定时间插入一条数据,如2018-06-21 15:37:00

//新事件
DROP EVENT IF EXISTS `event_at`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2018-06-21 15:37:00' ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN
INSERT INTO USER(name, address,addtime) VALUES('AT','AT',now());
END
;;
DELIMITER ;

查看结果

| 5317 | name1 | test1 | 2018-06-21 15:34:00 |
| 5318 | name2 | test2 | 2018-06-21 15:34:00 |
| 5319 | name1 | test1 | 2018-06-21 15:35:00 |
| 5320 | name2 | test2 | 2018-06-21 15:35:00 |
| 5321 | name1 | test1 | 2018-06-21 15:36:00 |
| 5322 | name2 | test2 | 2018-06-21 15:36:00 |
| 5323 | AT | AT | 2018-06-21 15:37:00 | //--------结果
| 5324 | name1 | test1 | 2018-06-21 15:37:00 |
| 5325 | name2 | test2 | 2018-06-21 15:37:00 |
+------+-------+---------+---------------------+

公司业务需求,删除两个月前的老数据

 

关于更多Mysql事件的例子,看一下下面的帖子。运用在自己的项目里就可以了

https://blog.csdn.net/shaobingj126/article/details/50680216

https://blog.csdn.net/eastmount/article/details/60984798

https://www.cnblogs.com/18JG23/p/6296679.html




推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 一、设置时区方法一:使用setup工具setup选择Timezoneconfiguration选择AsiaShanghai空格键勾选上System ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
author-avatar
手机用户2502859387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有