mysql navicat 自动执行定时任务事件

mysql navicat 自动执行定时任务事件,第1张

问:用navicat 能设置远程服务器吗,设置好了是写到远程服务器上的mysql中定时执行吗?navicat如果卸载了还能执行吗?


答:Navicat可以设置远程服务器,如果你连接的是远程服务器数据库那么就是设置到远程服务器的mysql中,而不是本机中,其实归根揭底这种方式就是在服务器上设置了一个mysql存储过程,然后定时调用这个存储过程而已;所以与你自己本地电脑上安装的Navicat软件无关,删除也没有问题的。

一、先看服务器MYSQL服务是否开启

1.查看是否开启定时任务

show variables like 'event_scheduler';

查看event_scheduler如果为OFF或0就表示关闭

//开启命令-查询中运行
set global event_scheduler = on;

2.设置重启服务器(重启mysql服务)继续执行

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

二、删除表7天以前的数据(开始创建自动运行脚本)

例子:删除表7天以前的数据

2.1 创建函数

选项:过程

CREATE DEFINER=`创建时自动添加的`@`%` PROCEDURE `del_chat_7d`()
BEGIN

		#用于删除访客与客服聊天记录7天表,只保留最近7天数据
	
    #定义变量
    DECLARE done int DEFAULT(0);#游标标记
    DECLARE timestampTmp INT;#时间戳
		DECLARE eid INT  DEFAULT(0);
    DECLARE err INT DEFAULT(0); #是否有sql错误
   

    #创建游标,并且存储数据,获取未处理,已结束的广告活动id
    DECLARE cur_ad CURSOR
                    FOR
					SELECT id FROM 库.表;#列出所有企业ID
										
    
    #游标中的内容执行完后将done设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    #检查sql是否有错
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1; 
		DECLARE CONTINUE HANDLER FOR 1146 SET err=0; #没有表的错误码-跳过当前循环往下走
		DECLARE CONTINUE HANDLER FOR 1243 SET err=0; #没有处理错误的错误码循环-跳过当前循环往下走
		

    #赋值当前时间
    SET timestampTmp = UNIX_TIMESTAMP(CURDATE())-7*24*3600;#7天前时间戳-零点以前

    #打开游标
    OPEN cur_ad;

    #执行循环
    posLoop:LOOP
                #游标结束或者SQL错误,结束循环
--  								SELECT done;#SELECT=打印=echo=输出执行完整状态
--  								SELECT err; #SELECT=打印=echo=输出错误状态

								
                IF done = 1 or err = 1 THEN
								   LEAVE posLoop;#退出循环-不能删除,不然进入死循环
                END IF;

								#取游标中的值
										FETCH  cur_ad INTO  eid;
										SELECT eid;#SELECT=打印=echo=输出 输出表名

										#删除数据7天以前的数据
										#@STMT作用是因为表名是变量
										set @STMT=CONCAT("DELETE FROM dc_chat_",eid,"_7d where time < ",timestampTmp,";");
-- 										SELECT @STMT;#打印出sql语句
										PREPARE STMT FROM @STMT;
										EXECUTE STMT;
										

    #结束循环
    END    LOOP posLoop;

    #释放游标
    CLOSE    cur_ad;
END
2.2 创建事件

代码:调起刚刚创建的函数

call del_chat_7d()

 每天执行一次,从2022-02-18 03:00:00开始执行

 上图AT表示该事件只执行一次

EVERY表示可多次重复执行,前面1表示循环的周期,DAY表示周期-每天(当然这里有很多选择,月,周,小时等等)

STARTS是一个 timestamp 值表示事件开始时间

+INTERVAL表示间隔以指定「由现在开始」的时间量

ENDS表示事件的结束时间

上图所设置的就表示:从2020年五月27号开始,每天0点执行
 

三、把数据从一个表复制到另一个表(有相同数据更新,没相同数据就新增加)

用REPLACE INTO复制数据,一定要有作为唯一字段(自增ID)或索引,不然不能判断是否相同数据来更新;没有自增ID就要设置唯一联合索引

 联合唯一索引设置:

第一种:表中有自增ID字段,那么只能把字段全部写出(把ID字段去掉)

第二种:表没ID自增字段,但是有唯一联合索引,索引用于判断是否同一条记录

第一种缺点表中第个字段都要写出来;第二种不用写表字段

//表字段:id,title,type,statu

//1.不判断重复数据,有相同数据都当新数据插入
INSERT INTO `power_node`(title,type,status) SELECT title,type,status FROM power_node WHERE id < 5;

//2.判断重复数据,有相同数据更新数据(但是数据中要唯一的联合索引)
REPLACE INTO `power_node` SELECT * FROM power_node WHERE id < 5;

 创建函数,并创建事件,按上面一样的设置

CREATE DEFINER=`fncmscom`@`%` PROCEDURE `card_7d_goto_3m`()
BEGIN

		#1.把7天表中超过7天的数据移动到3月表中,同时把超过7天的从7天表中删除-dc_chat_card_x_
		#2.把3月表中超过3月的数据移动到3月之前表中,同时把超过3月的从3月表中删除-dc_chat_card_x_
	
    #定义变量
    DECLARE done int DEFAULT(0);#游标标记
    DECLARE timestampTmp7d INT;#时间戳-7天-7d
		DECLARE timestampTmp3m INT;#时间戳-3月-3m
		DECLARE eid INT  DEFAULT(0);
    DECLARE err INT DEFAULT(0); #是否有sql错误

	 

    #创建游标,并且存储数据,获取未处理,已结束的广告活动id
    DECLARE cur_ad CURSOR
                    FOR
                    #SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME like 'dc_chat_%_7d';
										SELECT id FROM www_datacms_com.dc_enterprise;#列出所有企业ID
										
    
    #游标中的内容执行完后将done设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    #检查sql是否有错
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1; 
		DECLARE CONTINUE HANDLER FOR 1146 SET err=0; #没有表的错误码-跳过当前循环往下走
		DECLARE CONTINUE HANDLER FOR 1243 SET err=0; #没有处理错误的错误码循环-跳过当前循环往下走
		

    #赋值当前时间
    SET timestampTmp7d = UNIX_TIMESTAMP(CURDATE())-7*24*3600;#7天前时间戳-零点以前
		SET timestampTmp3m = UNIX_TIMESTAMP(CURDATE())-90*24*3600;#90天前时间戳-零点以前
		
    #打开游标
    OPEN cur_ad;

    #执行循环
    posLoop:LOOP
                #游标结束或者SQL错误,结束循环
--  								SELECT done;#SELECT=打印=echo=输出执行完整状态
--  								SELECT err; #SELECT=打印=echo=输出错误状态

								
                IF done = 1 or err = 1 THEN
								   LEAVE posLoop;#退出循环-不能删除,不然进入死循环
                END IF;

								#取游标中的值
										FETCH  cur_ad INTO  eid;
-- 										SELECT eid;#SELECT=打印=echo=输出 输出表名

										#1.插入-把7天表中超过7天的数据移动到3月表中
										#@STMT作用是因为表名是变量
										#REPLACE into 作用当存在数据就修改没有新增加,但是不能自增ID字段,我们设置了唯一的联合索引uid
										set @STMT=CONCAT("REPLACE into dc_chat_card_",eid,"_3m select * from dc_chat_card_",eid,"_7d where time < ",timestampTmp7d,";");#在3月表中插入7天表中超过7天的数据
-- 										set @STMT=CONCAT("REPLACE into dc_chat_card_",eid,"_3m(",allfield,") select ",allfield," from dc_chat_card_",eid,"_7d where time < ",timestampTmp7d,";");#在3月表中插入7天表中超过7天的数据
-- 										set @STMT=CONCAT("SELECT * FROM dc_chat_card_",eid,"_7d where time < ",timestampTmp7d,";");#查询超过7天的数据
										SELECT @STMT;#打印出sql语句
										PREPARE STMT FROM @STMT;
										EXECUTE STMT;
										
										#2.删除-把7天表中超过7天的数据删除
										set @STMT=CONCAT("DELETE FROM dc_chat_card_",eid,"_7d where time < ",timestampTmp7d,";");#删除
										SELECT @STMT;#打印出sql语句
										PREPARE STMT FROM @STMT;
										EXECUTE STMT;
										

    #结束循环
    END    LOOP posLoop;

    #释放游标
    CLOSE    cur_ad;
END

参考:

https://blog.csdn.net/weixin_44052462/article/details/106380101
https://blog.csdn.net/baochao95/article/details/45951201

MySQL数据篇(九)--存储过程实现定时每天清理过期数据 - 在斑马线上散布 - 博客园

mysql事件每天执行一次_MySQL-事件_真力 GENELEC的博客-CSDN博客

https://blog.csdn.net/laowang2915/article/details/79665001
https://www.cnblogs.com/chenpi/p/5137310.html
https://blog.csdn.net/xishining/article/details/85241941
https://blog.csdn.net/z919167107/article/details/90550912

https://www.cnblogs.com/xiaozhouyuxiaohou/p/9184248.html
https://www.cnblogs.com/camg/p/11890448.html
https://blog.csdn.net/business122/article/details/7528859
https://www.jianshu.com/p/cb0152efac32
https://blog.csdn.net/ruohan520/article/details/4694777
https://blog.csdn.net/weixin_32873435/article/details/113540671
https://blog.csdn.net/iteye_12421/article/details/82075393
https://blog.csdn.net/qq_34769161/article/details/88247203
https://blog.csdn.net/fengchengwu2012/article/details/106240161

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/991538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存