百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

超详细的mysql数据库事件--定时任务介绍及日常管理

qiyuwang 2024-11-08 14:35 15 浏览 0 评论

概述

由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务。

后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点,主要是针对比较大型的项目。


一、事件概述

在MySQL 5.1中新增了一个特色功能事件调度器(Event Scheduler),简称事件。

事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。


二、事件的优缺点

1、优点

一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

2、缺点

定时触发,不可以调用。



三、事件调度器参数

事件由一个特定的线程来管理。启用事件调度器后,拥有SUPER权限的账户执行SHOW PROCESSLIST就可以看到这个线程了。

--查看事件是否开启。
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
--全局开启事件调度器
SET GLOBAL event_scheduler = ON;
--全局关闭事件调度器
SET GLOBAL event_scheduler = OFF;
--永久开启事件调度器(在my.cnf配置文件中添加)
#事件调度器启动状态
event_scheduler = on



四、创建事件

一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(eventschedule,表示事件何时启动以及按什么频率启动;

第二部分是事件动作(event action),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者

benin...end语句块,这两种情况允许我们执行多条SQL。

一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。

相关语法:

CREATE
  [DEFINER = { user | CURRENT_USER }] 
  EVENT   [IF NOT EXISTS]   event_name 
  ON SCHEDULE schedule 
  [ON COMPLETION [NOT] PRESERVE] 
  [ENABLE | DISABLE | DISABLE ON SLAVE] 
  [COMMENT 'comment'] 
  DO event_body; 
   
schedule: 
  AT timestamp [+ INTERVAL interval] ... 
 | EVERY interval 
  [STARTS timestamp [+ INTERVAL interval] ...] 
  [ENDS timestamp [+ INTERVAL interval] ...] 
   
interval: 
  quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | 
       WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | 
       DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

说明:





五、事件(定时任务)管理

1、查询事件

在MySQL中可以通过查询information_schema.events表,查看已创建的事件。

--查看当前所在库的事件
show events;
--查看所有事件
SELECT * FROM information_schema.events; 


2、修改事件

事件被创建之后,还可以使用ALTER EVENT语句修改其定义和相关属性

ALTER
	[DEFINER={user | CURRENT_USER}]
	EVENT [IF NOT EXISTS] event_name
	ON SCHEDULE schedule
	[ON COMPLETION [NOT] PRESERVE]
	[ENABLE | DISABLE | DISABLE ON SLAVE]
	[COMMENT 'comment']
	DO event_body;


3、启动与关闭事件

ALTER EVENT语句可以让一个事件关闭或再次活动。

--启动事件。
ALTER EVENT event_name ENABLE;
--关闭事件。
ALTER EVENT event_name DISABLE;


4、删除事件

删除已经创建的事件可以使用DROP EVENT语句来实现。

?DROP EVENT IF EXISTS event_name;



六、实例演示

1、事件+sql

创建名称为event_t1的事件,用于每隔5秒钟向数据表t1(用户信息表)中插入一条数据。

-- 创建用户信息表
CREATE TABLE IF NOT EXISTS t1
(
 id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
 name VARCHAR(30) NOT NULL COMMENT '用户姓名',
 create_time TIMESTAMP COMMENT '创建时间'
) COMMENT = '用户信息表';
-- 创建事件
CREATE EVENT IF NOT EXISTS event_t1
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
COMMENT '新增用户信息定时任务'
DO INSERT INTO t1(name,create_time) VALUES('hwb',NOW());


2、事件+存储过程

--创建总表
CREATE TABLE IF NOT EXISTS t_total
(
 userNumber INT  COMMENT '用户数',
 createtime TIMESTAMP COMMENT '创建时间'
) COMMENT = '总表';
--创建名称为t_total的存储过程,用于统计前面表插入的数量
CREATE PROCEDURE t_total()
BEGIN
 DECLARE n_total INT default 0;
 SELECT COUNT(*) INTO n_total FROM t1;
 INSERT INTO t_total (userNumber,createtime) VALUES(n_total,NOW());
END;
--创建名称为event_total的事件,用于在每天12点调用存储过程。
CREATE EVENT IF NOT EXISTS event_total
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 12 HOUR)
ON COMPLETION PRESERVE ENABLE
DO CALL t_total();



觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~


相关推荐

PPO 强化学习机械臂 IK 训练过程可视化利器 Tensorboard

视频讲解:PPO强化学习机械臂IK训练过程可视化利器Tensorboard_哔哩哔哩_bilibili...

免费定时运行Python程序并存储输出文档的服务推荐

免费定时运行Python程序并存储输出文档的服务推荐以下是几种可以免费定时运行Python程序并存储输出结果的云服务方案:1.PythonAnywhere特点:提供免费的Python托管环境...

实战搭建深度学习运行

一、准备环境ubuntu22.04nvidia显卡这里使用的是RTX3060已安装Python3.10二、安装pip3...

部署Django到阿里云服务器教程

基于Ubuntu16.04+Python3+nginx+mysql+Django接下来先安装这些必要的环境,这些操作都是在你已经购买了阿里云服务器。并且在本地你已经搭建好了Django...

Ubuntu 22.04安装MySQL : Qwen2.5 模型对话数据收集与微调教程

1安装MySQL首先来到(安装)根目录下,开启终端...

3D点云数据处理简明教程【Python】

近年来,在AR和空间计算技术的大力推动下,在Apple和Meta等大公司的支持下,最近推出了AppleVisionPro,3D理解领域受到越来越多的关注。...

Ubuntu22.04中定时执行任务(cron)设置

做这个实验,主要涉及内容如下:cronTest.py待执行的python文件,代码会读入本地文件内容,并打印当前时间cron_run.sh将执行cronTest.py的语句,包装成shellcro...

使用vllm部署DeepSeek

1、基础环境1.1、基础环境准备RTX3090*2卡ubuntu22.04python3.12cuda12.4pytorch2.5.1...

一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)

之前我们介绍了如何使用嵌入式Python3环境给项目制作一键整合包,在使用嵌入式Python环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的...

从零开始:Ubuntu Server中MySQL 8.0的安装与Django数据库配置详解

Ubuntu系统纯净安装MySQL8.01、安装Mysql8.0sudoaptinstallmysql-server...

同一台电脑如何共存多个版本Python?

同一台电脑可以安装多个版本Python吗?可以共存!当前电脑安装了Python3.8.832位,为了调用大漠插件dll,但是我又想安装较新版本的64位Python3.12.0,就涉及到多个Pytho...

我把 ML 模型编译成 C 后,速度竟提升了 1000 倍!

...

zabbix企业微信告警

zabbix企业微信告警的前提是用户有企业微信且创建了一个能够发送消息的应用,具体怎么创建可以协同用户侧企业微信的管理员。第一步:企业微信准备我们需要的内容包括企业ID,应用的AgentId和应用的S...

「2022 年」崔庆才 Python3 爬虫教程 - urllib 爬虫初体验

首先我们介绍一个Python库,叫做urllib,利用它我们可以实现HTTP请求的发送,而不用去关心HTTP协议本身甚至更低层的实现。我们只需要指定请求的URL、请求头、请求体等信息即...

手把手教你搭建深度学习环境Pytorch版-Ubuntu

引言很多搞人工智能的小伙伴,刚开始学习,往往摸不着头脑怎么跑代码。跑代码的前提是要有个环境。本篇结合自己的亲身经历,带你搭建环境。相关知识Ubuntu是Linux系统的一种...

取消回复欢迎 发表评论: