Linux下如何实现Mysql定时任务

假设前提:每天晚上10点到早上5点,每10分钟定时执行存储过程。

实现方式:

第一种是利用Mysql本身实现,制定event定时任务,可以借助Navicat For Mysql或其他数据库开发工具去做;
第二种实现方式是利用linux的定时任务,这个是利用Linux系统自带任务管理工具实现的。

一、Mysql中event定时任务的相关命令,

1.查看event是否启用:

SELECT @@event_scheduler;
或
SHOW VARIABLES LIKE 'event%'; 

2.开启定时任务:

set GLOBAL event_scheduler = 1;
或
SET GLOBAL event_scheduler = ON; 

3.建立定时任务:

DROP EVENT IF EXISTS JOB_ALARM;
CREATE EVENT JOB_ALARM
 ON SCHEDULE EVERY 10 MINUTE
DO
 BEGIN
  if(date_format(current_time(),'%H')>22 || date_format(current_time(),'%H')<5) THEN
   CALL PRO_ALARM();
  END IF;
END

4.建立存储过程:

DROP PROCEDURE IF EXISTS PRO_ALARM;
CREATE PROCEDURE PRO_ALARM()
 BEGIN
  DECLARE userId VARCHAR(32);
  #这个用于处理游标到达最后一行的情况
  DECLARE s INT DEFAULT 0;
  #声明游标cursor_name(cursor_name是个多行结果集)
  DECLARE cursor_data CURSOR FOR
   SELECT tmp.USER_ID
   FROM (
       SELECT
        e.USER_ID,
        MAX(e.TIME_GMT) TIME_GMT
       FROM EVENTS e
       GROUP BY e.USER_ID
       HAVING MAX(e.TIME_GMT) < UNIX_TIMESTAMP() - 60 * 30
          AND MAX(e.TIME_GMT) > UNIX_TIMESTAMP() - 60 * 60 * 24) tmp
    INNER JOIN EVENTS t ON tmp.USER_ID = t.USER_ID
                   AND tmp.TIME_GMT = t.TIME_GMT
   WHERE TYPE_ID != '34001';
  #设置一个终止标记
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = 1;
  OPEN cursor_data;
  #获取游标当前指针的记录,读取一行数据并传给变量a,b
  FETCH cursor_data
  INTO userId;
  #开始循环,判断是否游标已经到达了最后作为循环条件
  WHILE s <> 1 DO
   INSERT INTO EVENTS_NOTIFICATION VALUES (NULL, SYSDATE(), UNIX_TIMESTAMP(SYSDATE()),
                          UNIX_TIMESTAMP(SYSDATE()), '00000', userId, '1', '0');
   #读取下一行的数据
   FETCH cursor_data
   INTO userId;
  END WHILE;
  #关闭游标
  CLOSE cursor_data;
 END; 

二、利用linux的定时任务,

linux定时任务基本命令:

查看定时任务:crontab -l
编辑定时任务:crontab -e

*/10 22-23,0-5 * * *   mysql -u用户名 -p密码 -e "use db_name;CALL PRO_ALARM();"

或者把use db_name;CALL PRO_ALARM();存到sql脚本中,编辑定时任务如下:

*/10 22-23,0-5 * * *   mysql -u用户名 -p密码 < /application/Job_mysql.sql

总结

以上所述是小编给大家介绍的Linux下如何实现Mysql定时任务,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • MySQL计划任务(事件调度器) Event Scheduler介绍

    要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_scheduler';或 SELECT @@event_scheduler;或 SHOW PROCESSLIST;若显示: +-----------------+-------+| Variable_name   | Value |+-----------------+-------+| event_scheduler | OFF   |+-----------------+-------+

  • Python实现简单的多任务mysql转xml的方法

    本文实例讲述了Python实现简单的多任务mysql转xml的方法.分享给大家供大家参考,具体如下: 为了需求导出的格式尽量和navicat导出的xml一致. 用的gevent,文件i/o操作会阻塞,所以并不会完全异步. 1. mysql2xml.py: # -*- coding: utf-8 -*- ''' Created on 2014/12/27 @author: Yoki ''' import gevent import pymysql from pymysql.cursors impo

  • mysql的定时任务实例教程

    前言 自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作.更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次.对于一些对数据实时性要求比较高的应用(例如:股票.赔率.比分等)就非常适合. 本文将给大家详细介绍关于

  • Linux下Mysql定时任务备份数据的实现方法

    前言 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.而对于一些网站.系统来说,数据库就是一切,所以做好数据库的备份是至关重要的! 备份是什么? 本实例将创建目录放置于/mnt目录下,可根据具体情况放置于其他目录: cd /mnt mkdir dbback pwd /mnt/dbback 创建shell脚本 脚本名称可根据自己规范进行自定义: vim bcmysql.sh 进入编辑器,输入以下内容: #!

  • MySQL数据库Event定时执行任务详解

    一.背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间.即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的.在我们项目中由于不清理数据,一个表占的空间竟然达到了4G之多.想想有多可怕... 这里介绍的是用MySQL 建立一个定时器Event,定期清除掉之前的不必要事件. 二.内容 #1.建立存储过程供事件调用 delimiter// drop procedure if exists middle_proce// create proc

  • 浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%';  set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可以 event_scheduler = ON set time_zone = '+8:00'; set GLOBAL event_scheduler = 1; -- 设置该事件使用或所属的数据库base数据库 use test; -- 如果原来存在该名字的任务计划则先删除 drop event i

  • 详解MySQL用事件调度器Event Scheduler创建定时任务

    前言 事件调度器相当于操作系统中的定时任务(如:Linux中的cron.Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用. 1. 创建/修改事件(EVENT) 在MySql中,创建一个新的调度器使用CREATE EVENT,其语法规则如下: CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON

  • MySQL定时执行脚本(计划任务)命令实例

    查看event是否开启 复制代码 代码如下: show variables like '%sche%'; 将事件计划开启 复制代码 代码如下: set global event_scheduler =1; 创建存储过程test 复制代码 代码如下: CREATE PROCEDURE test () BEGIN update examinfo SET endtime = now() WHERE id = 14; END; 创建event e_test 复制代码 代码如下: create event

  • mysql定时任务(event事件)实现详解

    1.事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的"事件调度器". 事件和触发器类似,都是在某些事情发生的时候启动.当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的.由于他们彼此相似,所以事件也称为临时性触发器. 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linu

  • mysql实现设置定时任务的方法分析

    本文实例讲述了mysql实现设置定时任务的方法.分享给大家供大家参考,具体如下: 今天遇到了个需要每天定时执行的任务,在mysql数据库里面提供了这样的功能,正好整理下分享出来. 1.首先检查是否开启了定时任务 查看event是否开启 : SHOW VARIABLES LIKE '%event_sche%'; 将事件计划开启 : SET GLOBAL event_scheduler = 1; 将事件计划关闭 : SET GLOBAL event_scheduler = 0; 关闭事件任务 : A

随机推荐