-
2022-03-18 23:56:27
1、创建存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `synData`() BEGIN drop table if exists user; create table user select * from rych.user; END
2、创建定时任务事件
CREATE DEFINER=`root`@`localhost` EVENT `loop_syn` ON SCHEDULE EVERY 20 MINUTE STARTS '2022-03-18 03:05:00' ON COMPLETION NOT PRESERVE ENABLE DO CALL `synData`
3、开启定时器
set GLOBAL event_scheduler = 1;
4、开启/暂停事件
ALTER EVENT loop_syn ENABLE;
更多相关内容 -
MYSQL定时执行存储过程
2021-03-04 00:08:37本文重点,用mysql定时器定时执行存储程序。 第一步:编写存储程序(需了解基本的存储程序的语法) Sql代码 create procedure inproc() begin declare done int default 0; declare a,b,c int; declare curl cursor...查看event是否开启: show variables like '%sche%';
将事件计划开启: set global event_scheduler=1;
关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;
简单实例.
创建表 CREATE TABLE test(endtime DATETIME);
创建存储过程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
创建event e_test
CREATE EVENT if not exists e_test
on schedule every 30 second
on completion preserve
do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
实战mysql存储程序与定时器
存储过程定时器eventprocedure实战
需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。
旧方案:用脚本写好程序,用linux的crontab定时执行。
本文重点,用mysql定时器定时执行存储程序。
第一步:编写存储程序(需了解基本的存储程序的语法)
Sql代码
create procedure inproc()
begin
declare done int default 0;
declare a,b,c int;
declare curl cursor for select ver,date_format(time,'%Y%m%d') as dt,count(*) as count from ty.count where time>date_sub(curdate(),interval 1 day) group by ver,dt;
declare continue handler for sqlstate '02000' set done = 1;
open curl;
repeat
fetch curl into a,b,c;
if not done then
insert into ty.daycount values (null,b,a,c);
end if;
until done end repeat;
close curl;
end
这个存储程序主要用过了declare定义局部变量,声明curl光标,利用光标直到遍历结果集的作用。
执行这个语句之前要先
Sql代码
delimiter $$
执行完成后再
Sql代码
delimiter ;
用show查看是否已经成功
Sql代码
show procedure status like '%%';
第二步:开启mysql定时器
如果不是on,就执行
Sql代码
set global event_scheduler=1;
不需要重启mysql
会发现mysql多起了一个daemon进程
(注: 对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。)
第三步:创建定时任务
语法:
CREATE EVENT 的语法如下:
CREATE EVENT
[IF NOT EXISTS] ---------------------------------------------*标注1
event_name -----------------------------------------------------*标注2
ON SCHEDULE schedule ------------------------------------*标注3
[ON COMPLETION [NOT] PRESERVE] -----------------*标注4
[ENABLE | DISABLE] ----------------------------------------*标注5
[COMMENT 'comment'] --------------------------------------*标注6
DO sql_statement -----------------------------------------------*标注7
;
标注3:ON SCHEDULE
ON SCHEDULE 计划任务,有两种设定计划任务的方式:
1. AT 时间戳,用来完成单次的计划任务。
2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。
在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
标注4: [ON COMPLETION [NOT] PRESERVE]
ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
标注5:[ENABLE | DISABLE]
参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。
可以用如下命令关闭或开启事件:
Sql代码
ALTER EVENT event_name ENABLE/DISABLE
下面是我的实例,每天凌晨一点执行
Sql代码
CREATE EVENT `event_call_inproc` ON SCHEDULE EVERY 1 DAY STARTS '2013-09-12 01:00:00' ON COMPLETION PRESERVE ENABLE DO begin call ty.inproc();end
另外的一些例子:
Sql代码
每个月的一号凌晨1 点执行
CREATE EVENT EVENT2
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL STAT();
END
每个季度一号的凌晨2点执行
CREATE EVENT TOTAL_SEASON_EVENT
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2
HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL SEASON_STAT();
END
每年1月1号凌晨四点执行
CREATE EVENT TOTAL_YEAR_EVENT
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL YEAR_STAT();
END
-
mysql 让一个存储过程定时作业的代码
2021-01-19 22:22:291、在mysql 中建立一个数据库 test1 语句:create database test1 2、创建表examinfo create table examinfo( id int ... 4 创建存储过程test CREATE PROCEDURE test () BEGIN update examinfo SET endtime = now() WH -
mysql的存储过程实现定时任务执行
2022-04-03 22:43:101开启函数:在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。 2.开启设置: 设置只存在于当前操作, set global log_bin_trust_function_creators=1; show ...一 函数
1.1 函数开启
1开启函数:在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。
2.开启设置:
设置只存在于当前操作,
set global log_bin_trust_function_creators=1;
show variables like 'log_bin_trust_function_creators';
3.永久性设置的话:想要永久生效,需要写入到配置文件中:
在 [mysqld] 中加上 log_bin_trust_function_creators=11.2 函数的案例
1.创建
DELIMITER $$ CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11) BEGIN DECLARE i INT DEFAULT 0; SET i = FLOOR(from_num +RAND()*(to_num -from_num+1)) ; RETURN i; END$$
2.调用
select rand_num(10,30) from nongda.tb_org
1.3 删除函数
如果要删除函数:drop function rand_num;
1.4 函数和存储过程的区别
函数有返回值;存储过程没有返回值
二 存储过程
2.1 存储过程
1.声明存储过程
#执行存储过程,往 dept 表添加随机数据 DELIMITER $$ CREATE PROCEDURE `insert_dept`( max_num INT ) BEGIN DECLARE i INT DEFAULT 0; SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO dept (id,name) VALUES (rand_num(1,500000),'ljf'); UNTIL i = max_num END REPEAT; COMMIT; END$$
2.调用存储过程
DELIMITER ;
call insert_dept(50)3.查看结果:
三 存储过程的定时任务
3.1 查看是否开启事件
1.show variables like '%event_sche%';
2. 开启:
错误信息是:
Error Code: 1290. The MySQL server is running with the –event-scheduler=DISABLED or –skip-grant-tables option so it cannot execute this statement
skip-grant-tables这个选项用于启动MySQL时跳过权限表的限制,不验证密码。但是如果有了skip-grant-tables,那么event-scheduler是不起作用的,可能也是为了安全性的考虑。
远程到mysql服务器上将my.ini的skip-grant-tables选项去掉,然后确定在my.ini中:
event_scheduler=1
3.修改如下:
4.重启mysql:以管理员身份,进行关闭数据库和启动数据库
4.再次查看
5. 如果执行完这一句,如果显示access denied;
表示你没有开启定时任务的权限,联系运维给你开通权限。
5.1 在安装的MySQL的目录下,找my.ini文件;新增:skip-grant-tables
5.2 再重启服务器mysql
5.3 登录mysql,键入mysql –uroot –p;直接回车(Enter)
5.4.输入mysql回车,如果成功,将出现MySQL提示符 >。
连接权限数据库: use mysql;update user set authentication_string=password('123') where user='root';
5.5 退出 quit,停止服务器
5.6 再到 my.ini文件中注释掉 #skip-grant-tables。
5.7 重启服务器,OK!
3.2 设置定时任务思想: 先创建存储过程,再定义执行周期
1.设置存储过程
-- 创建存储过程test
CREATE PROCEDURE test_d2 ()
BEGIN
DROP TABLE IF EXISTS test_ddd;
/*************************************/
CREATE table test_ddd AS SELECT NOW()
;
END;2.设置定时事件
create event if not exists t_event_name on schedule at '2022-07-22 08:17:00' on completion preserve do call test_d2();
3.结果:
案例2: 设置每5秒执行一次
DROP EVENT IF EXISTS hh;
create event hh
ON SCHEDULE EVERY 5 SECOND STARTS TIMESTAMP '2022-07-21 01:00:00'
ON COMPLETION PRESERVE
DO
begin
CALL test_d2();
end3.3 常见任务执行周期的设定
# 从2019-10-11开始,每天的00:30:00执行定时任务
ON SCHEDULE EVERY 1 DAY STARTS '2019-10-11 00:30:00'
# 每天的凌晨1点执行定时任务
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
# 特定的日期特定的时间点执行定时任务
ON SCHEDULE at '2019-10-10 19:14:10'
# 每五分钟执行一次定时任务
ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE()
# 每小时执行一次定时任务
ON SCHEDULE EVERY 1 HOUR STARTS CURDATE()
-
mysql怎么让一个存储过程定时执行
2021-01-19 07:20:54比如说每天的12:30执行查看event是否开启: show variables like '%sche%';将事件计划开启: set global event_scheduler=1;关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;开户事件任务: alter ...比如说每天的12:30执行
查看event是否开启: show variables like '%sche%';
将事件计划开启: set global event_scheduler=1;
关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;
简单实例.
创建表 CREATE TABLE test(endtime DATETIME);
创建存储过程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
创建event e_test
CREATE EVENT if not exists e_test
on schedule every 30 second
on completion preserve
do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
mysql 让一个存储过程定时作业的代码
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
mysql 让一个存储过程定时作业的代码(转)
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101
视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...
修正MYSQL错误数据的一个存储过程
-- 添加索引 CREATE INDEX idx_STRUCTURE_ID ON t_resource_info(STRUCTURE_ID); DROP PROCEDURE IF EXISTS `P_ ...
mysql定时任务,每天的零点执行一个存储过程
1 前言 利用navicat工具来写存储过程及定时执行,此文章是按照自身经验总结的,仅作为记录使用. 2 步骤 2.1 新建过程 2.2 在函数体写你需要执行的代码 CREATE DEFINER=`r ...
MVC 定时执行任务
环境:.net4.5 需求:需要一个方法定时执行任务 解决: System.Threading.Timer 提供以指定的时间间隔执行方法的机制. 此类不能被继承,有10多种实例化方法,满足多种情况. ...
mysql创建定时执行存储过程任务
sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...
mysql命令行创建存储过程命令行定时执行sql语句
mysql -uroot -p show databases; use scm; show tables; show procedure status; 其他命令: SHOW VARIABLES LI ...
使用oracle 的 PL/Sql 定时执行一个存储过程
CSDN日报20170322-- 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...
随机推荐
JavaScript的学习5
一.DOM对象 1.DOM对象:Document Object Model 文档对象模型,主要是用来提供了操作HTML文档的属性与方法 2.DOM的分类: a.核心DOM:为操作XML和HTML ...
[C++]项目中的代码注释规范(整理)
原文:http://blog.csdn.net/pleasecallmewhy/article/details/8658795 1 源文件头部注释 列出:版权.作者.编写日期和描述. 每行不要超过80 ...
怎么解决/bin/sh: arm-linux-gcc: not found make
1.arm-linux-gcc 环境变量没有设,所以找不到这个编译器 在/etc/profile里添加arm-linux-gcc的存放路径 sudo -s gedit /etc/profile 编 ...
图解TCP/IP读书笔记(一)
图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...
管理和维护RHCS集群
导读 管理和维护RHCS集群是一个非常复杂和繁琐的工作,要维护好一个RHCS集群,必须熟悉RHCS的基本运行原理,在集群管理方面,RHCS提供了两种方式:即Luci图形界面方式和命令行方式,这儿重点讲 ...
[POJ 2774] Long Long Message 【后缀数组】
题目链接:POJ - 2774 题目分析 题目要求求出两个字符串的最长公共子串,使用后缀数组求解会十分容易. 将两个字符串用特殊字符隔开再连接到一起,求出后缀数组. 可以看出,最长公共子串就是两个字符 ...
Java For循环效率试验
非常奇怪的结果! ..! 测试方法如以下 public class Main { public static void main(String[] args){ long ti = System.cu ...
Servlet过滤器——过滤器分析流量
1.概述 Servlet过滤器可以对用户提交的数据或服务器返回的数据进行更改.任何到达服务器的请求都会首先经过过滤器的处理.本实例应用过滤器的这个特点,编写了一个在过滤器中统计网站流量的实例. 本实例 ...
node.js之调试器
node.js之调试器 1.在命令行窗口中,可以使用"node debug" 命令来启用调试器,代码如下: node debug 接下来根据一 ...
-
mysql定时执行存储过程demo
2017-04-12 17:51:16#每隔10秒将执行存储过程p_test ONCOMPLETION PRESERVE DO BEGIN CALL stored_procedure(); END // =================================================================... -
mysql创建定时执行存储过程任务
2021-01-19 12:29:17目标:定时更新表或者清空表。案例:曾经做过定时清空位置信息表的任务。(然而,当时并未考虑服务器挂掉后的情况)本次测试:每5s更新表字段+11.prepare创建一个表:DROP TABLE IF EXISTS `test_sche`;CREATE TABLE `... -
mysql 定时执行存储过程
2015-09-28 12:56:281.创建存储过程用的navicate for mysql 在navicate中的函数新建函数 2.创建定时任务,在navicate中的事件新增事件 -
mysql定时执行某一存储过程,并实现mysql数据库的定时备份
2017-08-27 22:47:551、存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 语法: CREATE PROCEDURE 过程名([... -
mysql事件定时任务不执行问题记录
2022-07-12 17:09:48今天协助BI工程师开发存储过程,通过Navicat执行事件定时任务调用存储过程,发现事件并没有执行,特此记录 -
mysql存储过程传参问题
2022-04-29 19:47:14如果仅仅想传给mysql存储过程,那就用in类型 如果仅仅从mysql存储过程返回值,那就用out类型 如果需要把数据传给mysql存储过程,还要经过一些计算再回传我们,此时,要使用inout类型 1.无参数 call 存储... -
Mysql存储过程和定时任务
2022-04-15 17:30:41存储过程 DROP PROCEDURE IF EXISTS canal_test; # 删除存储过程 CALL canal_test(); # 调用存储过程 CREATE PROCEDURE canal_test() #创建存储过程 #存储过程内容 BEGIN #开始 update users set mileage=... -
MySQL存储过程创建实例,双循环结果集并定时执行
2021-01-19 21:55:00使用navicat创建存储过程 BEGIN #Routine body goes here... DECLARE startTime DATETIME default date_sub(now(),interval 60 MINUTE);#起始时间 当前时间前一小时 DECLARE endTime DATETIME default NOW();... -
【linux】定时任务:mysql构建存储过程,查询数据库结果
2022-05-11 15:30:05一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 说... -
mysql 事件调用存储过程执行数据插入不执行问题
2021-01-19 07:51:49但是在query窗口中执行存储过程时,由于mysql 事务是默认关闭的,如果有insert 或者update 操作会自动提交. 所以在存储过程循环结尾 加一个commit ,问题解决 . 可以用 RESET QUERY CACHE; 清空缓存 ,重新检查一下... -
MySQL定时执行脚本(计划任务)命令实例
2021-01-21 14:49:33创建存储过程test 代码如下:CREATE PROCEDURE test () BEGIN update examinfo SET endtime = now() WHERE id = 14; END; 创建event e_test 代码如下:create event if not exists e_test on schedule every 30 ... -
mysql存储过程+事件 执行定时任务-Go语言中文社区
2021-01-27 19:45:24mysql怎么让一个存储过程定时执行查看event是否开启: show variables like '%sche%';将事件计划开启: set global event_scheduler=1;关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;开户事件任务... -
MYSQL利用事件和存储过程实现执行定时任务
2021-01-19 16:31:52比如有如下需求:删除某个表中当前...1.创建存储过程test()//删除ljh_test表中超过8分钟的记录//date_add() 增加//date_sub()减少//month 月份minute 分钟second 秒//例如:select DATE_ADD(NOW(),INTERVAL 1 MONTH);... -
mysql定时任务调用存储过程定时执行
2020-06-05 17:32:31mysql的定时事件可以设定在某个时间自动执行步骤如下: 注:如果是不知道如何创建存储过程,请查看我的上一篇博文 查看定时器是否开启: show variables like 'event_scheduler'; 查询结果如下: 此时说明没有... -
MySQL定时任务的实现(定时调用存储过程进行数据插入操作)
2019-10-09 09:04:39下面的案例是创建一个对表插入数据的存储过程,然后创建一个定时任务执行该存储过程。 创建一张关于环境数据的表wjs_dust_record_02;将设备获取到的环境数据信息存储到该表中。创建一个存储过程,作用是... -
Mysql 存储过程和定时执行
2018-08-18 17:14:26前提:这里我使用存储过程实现数据库的count值每5秒加一的功能,首先你的有一张表counter 1、创建存储过程 ... 代码如下 ...update counter set count=count+1;...2、定时执行 创建事件,如下图 CREATE EVENT cou... -
【mysql】定时任务事件开启,编写,调用存储过程
2021-12-06 11:17:20简单介绍定时任务的开启,编写,定时任务调用存储过程等。 -
mysql定时任务 每日执行存储过程
2019-08-26 19:09:07原文链接:mysql定时任务 每日执行存储过程 1、操作工具Navicat数据库操作工具。 2、创建一个存储过程 例如:delete From apply_setdtl where DATE(create_date) <= DATE(DATE_SUB(NOW(),INTERVAL 1 day)); -... -
使用sqlyog 创建定时执行存储过程
2021-01-26 18:31:25我们在项目得开发中,有时候需要执行定时任务,一般情况下是在代码块中创建定时器,执行某一些业务,一般情况下是更改数据库字段的值,下面给大家介绍下,如果使用sqlYog 创建mysql 的存储过程,并定时执行 ... -
mysql定时任务(event事件)实现详解
2021-01-19 22:48:24事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。... -
MySQL数据库Event定时执行任务详解
2020-09-09 12:20:02主要介绍了MySQL数据库Event定时执行任务