开启定时器调度

我们要在Mysql中创建定时任务之前,先要看一下MySql中的事件调度器是否开启了

  1. show variables like 'event_scheduler';

1592032042(1).png
显示的 event_scheduler 为OFF时用以下命令开启

set global event_scheduler=1;

注意:以上的修改会在数据库重启后失效,如果想让数据库重启后自动开启 event_scheduler,则需要在配置文件my.ini中添加如下设置

[mysqld]event_scheduler=ON //这一行加入mysqld标签下

修改之后重启数据库即可

创建定时任务

完成以上配置之后正式开始创建定时任务。
MySql中的定时任务需要分为两步,先创建要被执行的任务,即存储过程,再创建定时器来定时执行这个任务。

这里我们就创建一个最简单的存储过程

delimiter $$  
create procedure test_proce()
begin
insert into tb_stu (`name`, sex) values ('阿明', '男');
end $$
delimiter;

存储过程创建成功之后,我们创建一个定时器去定时执行这个存储过程

create event second_event        //创建一个名叫second_event的定时器
on schedule every 10 second      //每隔十秒触发一次
on completion preserve disable   //创建完成之后先不启用,如果要立即启用就改为enable
do call test_proce();            //执行test_proce这个存储过程

查看定时器,可以看本机所有的定时器

SELECT event_name,event_definition,interval_value,interval_field,status 
FROM information_schema.EVENTS;

开启或关闭已经创建好的定时器

alter event test_proce on completion preserve enable; //开启定时任务
alter event test_proce on completion preserve disable;//关闭定时任务

常用周期规则

周期执行 关键字 every
单位有 secondminutehourdayweekmonthquarter (季度)year

on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day    //每3天执行1次


在具体某个时间执行 关键字 AT

on schedule at current_timestamp()+interval 5 day      //5天后执行
on schedule at current_timestamp()+interval 10 minute  //10分钟后执行
on schedule at '2016-10-01 21:50:00'                   //在2016年10月1日,晚上9点50执行

在某个时间段执行 关键字 STARTS ENDS

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底

on schedule every 1 day ends current_timestamp()+interval 5 day            //从现在起每天执行,执行5天

关于主从同步

一般在生产上,我们会开启主库的定时器而关闭从库的定时器,将主库中触发的所有操作通过binlog同步到从库上面