mysql 数据库Event定时任务使用详解(Navicat 及直接SQL语句创建)

5人阅读 评论(0) 收藏 举报

mysql 数据库Event定时任务使用详解(Navicat 及直接SQL语句创建)

原创 2015年12月15日 16:58:42

一、使用Navicat创建Event
1、创建一个存储过程让定时任务Event调用:
打开Navicat查询界面:


在上述存储过程中将自定义的sql语句填写到BEGIN与END之间。


2、查看并打开event_scheduler调度事件:
再上图查询窗口执行查看:
show variables like '%sche%';
注:如果event_scheduler值为OFF则使用set global event_scheduler =1;打开。

3、创建Event调度任务:







保存完毕,则在1中定义的存储过程scheduler_sync()将会被每隔10秒执行一次!




二、使用纯SQL语句创建定时任务Event。
1、进入到mysql ,并开启event_schduler:
set global event_scheduler =1;
show variables like '%event%';

2、进入wishstack创建存储过程(本次测试数据库为wishstack):

CREATE PROCEDURE sync_date_2_monitor()
BEGIN
/*--             下述加入自定义的mysql处理逻辑         --*/

/*-- ----------------------------
-- 先删除  alert_msg 数据库表数据
-- 再同步 alert_msg 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.alarm_msg;

INSERT INTO monitor_screen.alarm_msg(id, alarm_id, resource_type, alarm_type, created_time, content, `level`)
SELECT UUID() AS id,
       id AS alarm_id,
       "2" AS resource_type, 
        CASE alarm_type
            WHEN "state" THEN "状态告警"
        END AS "alarm_type",
        created_time,
        description AS content,
        CASE `level`
            WHEN "general" THEN "1"
            WHEN "serious" THEN "2"
            WHEN "general" THEN "3"
        END AS "level"
FROM alarm;


/*-- ----------------------------
-- 先删除 overall_statistic 数据库表数据
-- 再同步 overall_statistic 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.overall_statistic;

INSERT INTO monitor_screen.overall_statistic(id, user_num_online, user_num_all, tenant_num, business_num, vm_num)
select a.id, b.user_num_online, c.user_num_all, d.tenant_num, e.business_num, f.vm_num FROM
(SELECT UUID() AS id) AS a join
(SELECT COUNT(id) AS user_num_online from `user` WHERE login_state=0 AND deleted=0) AS b join
(SELECT COUNT(id) AS user_num_all from `user` WHERE deleted=0) AS c join
(SELECT COUNT(id) AS tenant_num FROM `tenant`  WHERE deleted=0 ) AS d join
(SELECT COUNT(id) AS business_num FROM `business`  WHERE deleted=0 ) AS e join
(SELECT COUNT(id) AS vm_num FROM `instance`  WHERE deleted=0 ) AS f ;


/*-- ----------------------------
-- 先删除 tenant_res_spnd_t5 数据库表数据
-- 再同步 tenant_res_spnd_t5 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.tenant_res_spnd_t5;

INSERT INTO monitor_screen.tenant_res_spnd_t5
SELECT UUID() AS id,tenant.`name` AS tenant_name, vm_num 
    FROM (
            (SELECT tenant_id, COUNT(id) AS vm_num FROM instance WHERE instance.deleted != 1 GROUP BY tenant_id) AS a 
                    LEFT JOIN 
             tenant 
                    ON a.tenant_id=tenant.id AND tenant.deleted != 1
          );


/*-- ----------------------------
-- 先删除 resource_spending 数据库表数据
-- 再同步 resource_spending 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.resource_spending;

INSERT INTO monitor_screen.resource_spending(id, created_time, `hour`, cpu_use_ratio, memory_use_ratio) 
SELECT   UUID() AS id,
                 created_time, 
                 date_format(created_time, '%H') AS `hour`,
                 AVG(cpu_rate) AS cpu_use_ratio,
                 AVG(memory_rate) AS memory_use_ratio
                FROM instance
                GROUP BY date_format(created_time, '%Y-%m-%d %H');


/*-- ----------------------------
-- 先删除 cloud_tenant 数据库表数据
-- 再同步 cloud_tenant 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.cloud_tenant;

INSERT INTO monitor_screen.cloud_tenant
SELECT 
UUID() AS id,
tenant.`id` AS tenant_id, 
tenant.`name` AS tenant_name,
NULL AS lon,
NULL AS lat,
COUNT(DISTINCT CASE WHEN `user`.login_state = 0 AND `user`.deleted != 1 THEN `user`.id END) AS online_user_num,
COUNT(DISTINCT CASE WHEN instance.`status` = 'active' AND instance.deleted != 1 THEN instance.id END) AS online_vm_num,
COUNT(DISTINCT CASE WHEN `user`.deleted != 1 THEN `user`.id END) AS user_num,
COUNT(DISTINCT CASE WHEN `business`.deleted != 1 THEN business.id END) AS business_num,
COUNT(DISTINCT CASE WHEN instance.deleted != 1 THEN instance.id END) AS vm_num,
COUNT(DISTINCT CASE WHEN alarm.`status` != 'fix' THEN alarm.id END) AS sec_alarm_num,
AVG( instance.cpu_rate) AS vcpu_use_ratio,
AVG( instance.memory_rate) AS memory_use_ratio
FROM  tenant LEFT JOIN tenant_user ON tenant_user.tenant_id = tenant.id 
            LEFT JOIN `user` ON tenant_user.user_id = `user`.id 
            LEFT JOIN business ON  business.tenant_id = tenant.id 
            LEFT JOIN alarm ON alarm.tenant_uuid = tenant.uuid
            LEFT JOIN instance ON instance.tenant_id = tenant.id
GROUP BY tenant.id;


/*-- ----------------------------
-- 先删除 data_center 数据库表数据
-- 再同步 data_center 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.data_center;

INSERT INTO monitor_screen.data_center
SELECT 
UUID() AS id,
provider.id AS provider_id,
provider.`name` AS provider_name,
NULL AS lon,
NULL AS lat,
COUNT(DISTINCT virtual_server.id) AS computing_server_num,
COUNT(DISTINCT storage_device.id) AS storage_server_num,
COUNT(DISTINCT network_device.id) AS net_server_num,
COUNT(DISTINCT instance.id) AS visual_machine_num,
SUM(flavor.vcpus) AS visual_cpu_num,
SUM(flavor.memory_mb) AS visual_memory_capacity,
SUM(flavor.disk) AS visual_disc_capacity
FROM  provider LEFT JOIN virtual_server ON provider.id  = virtual_server.provider_id
            LEFT JOIN storage_device ON provider.id  = storage_device.provider_id
            LEFT JOIN network_device ON provider.id  = network_device.provider_id
            LEFT JOIN instance ON provider.id  = instance.provider_id
            LEFT JOIN flavor ON instance.flavor_uuid  = flavor.uuid
            LEFT JOIN physical_resource ON provider.id  = physical_resource.provider_id
                 GROUP BY provider.id;


/*-- ----------------------------
-- 先删除 link 数据库表数据
-- 再同步 link 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.link;

INSERT INTO monitor_screen.link
SELECT 
UUID() AS id,
tenant_id, 
provider_id
FROM tenant_provider;


/*-- ----------------------------
-- 先删除 vm_resource_statistic 数据库表数据
-- 再同步 vm_resource_statistic 更新相关数据
-- ----------------------------*/
DELETE FROM monitor_screen.vm_resource_statistic;

INSERT INTO monitor_screen.vm_resource_statistic
SELECT 
UUID() AS id,
SUM(vcpu_used) AS `assigned_vcpu_num`,
SUM(memory_used) AS `assigned_vmemory_capacity`,
SUM(storage_used) AS `assigned_vdisc_capacity`,
SUM(memory) AS `vmemory_capacity`,
SUM(`storage`) AS `vdisk_capacity`
FROM physical_resource;

END

上述绿色内容请填入相应的存储过程逻辑代码!!!


3、测试当前存储过程是否正确(没有报错则说明存储过程创建成功):


4、创建Event事件:
CREATE EVENT `My_Sync_Event`   /*-- Event事件名称 --*/
ON SCHEDULE EVERY 10 SECOND   /*-- 每隔10秒调度一次--*/
ON COMPLETION  PRESERVE   /*-- 当本次event到期了,event会被disable,但是该event还是会存在--*/
ENABLE   /*-- 开启Event调度--*/
DO
CALL scheduler_sync();   /*-- 调度任务调用上述创建的存储过程,周期执行任务--*/


5、对于Event的常用操作:
查看:SHOW EVENTS;

开启事件:
ALTER EVENT My_Sync_EventON COMPLETION PRESERVE ENABLE;

关闭事件:
ALTER EVENT My_Sync_EventON COMPLETION PRESERVE DISABLE;


删除事件:DROP EVENT IF EXISTS my_scheduler_event;



也可以在linux下用脚本实现:
#//usr/bin/sh
mysql -uroot -p123456 -e "source ./monitor_screen.sql"
mysql -uroot -p123456 -e "source ./monitor_screen_sync.sql"
版权声明:欢迎大家转载,转载请注明出处blog.csdn.net/tantexian。 https://blog.csdn.net/tantexian/article/details/50317829




查看评论

mysql sql语句调优

1.一些简单sql调优 2.复杂sql的调优
  • 2017年12月27日 12:11

[数据库] Navicat for MySQL事件Event实现数据每日定期操作

在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如: (1).每天凌晨12点对数据库进行定时备份,结算和汇总; (2).每天凌晨2点删除数据库前三天...
  • Eastmount
  • Eastmount
  • 2017-03-10 12:26:10
  • 6787

SQL定时任务(navicat for mysql)

开发中难免会有一些每月、每日甚至每小时都要更新或者备份数据的情况,而mysql提供了这样的功能。 1、首先,必须确认mysql是否开启了定时任务 查看event是否开启 : SHOWVARIABL...
  • qq_37303736
  • qq_37303736
  • 2018-01-25 17:27:46
  • 106

mysql要实现定时执行sql语句就要用到Event

mysql要实现定时执行sql语句就要用到Event 具体操作如下: 先看看看event 事件是否开启 show variables like '%sche%'; 如没开启,则开启。需要数据库超...
  • liu4071325
  • liu4071325
  • 2016-01-29 16:29:18
  • 2194

使用navicat for mysql 写一个简单的定时任务。

1.选中数据库,新建一个函数,选择过程,完成。(根据需要可在“下一步”设置参数) 2.在这个过程体中写我们要执行的语句,然后保存。 3.选择事件,新建事件,调用函数。 4.在本页选择计...
  • Aeyewp
  • Aeyewp
  • 2017-12-06 13:54:26
  • 235

Navicat for mysql的安装,sql语句使用,以及复制数据库

花了2天左右,将navicat for mysql数据库管理工具的基本使用,有了粗略的了解。这里mark一下。 一、安装以及数据库的连接 1. 安装Navicat for mysql 官网下载N...
  • liujingqiu
  • liujingqiu
  • 2016-11-23 15:52:12
  • 4415

在Navicat for MySQL中查看数据表创建语句

右键数据表,对象信息,选择“DDL”即可。 有图有真相
  • leejianjun
  • leejianjun
  • 2017-01-23 17:57:10
  • 10408

在SQLSERVER中增加定时任务

最近一个系统需要在sqlserver中每天定时执行一个任务,本想使用笨的办法采用外部定时更新程序,最后查了相关资料才发现原来sqlserver的JOB可以完成该功能,汗自己原来对ms的SQLserve...
  • crystal521
  • crystal521
  • 2006-08-30 13:40:00
  • 1455

Mysql定时执行任务,执行批量的sql语句 并且查看已经生成的定时事件

如果你是5.1后的版本的话,可以用event功能,示例如下: 检查event功能:  mysql> show variables like '%sche%'; +-----------------+...
  • kejia90
  • kejia90
  • 2014-10-27 16:03:54
  • 2162

Navicat设定mysql定时任务

有个需求:将一张表的前一天的数据抽取到另一张表中,使用Mysql数据库的客户端Navicat配置 第一步,创建过程cust_report,直接在查询窗口中执行,保存后函数列表中就会出现。 第二...
  • zhenzhendeblog
  • zhenzhendeblog
  • 2016-01-28 13:33:47
  • 2284
    个人资料
    等级:
    访问量: 505
    积分: 106
    排名: 142万+
    文章分类
    文章存档
    最新评论