定期调用存款和储蓄进程,稳步解说MySQL中定时事件布置的制造

数据库

mysql-定期调用存款和储蓄进程

mysql定期调用存款和储蓄进程,对表数据集表结构进行备份

累积进程实例:

CREATE PROCEDURE backUpSms()
BEGIN
 DECLARE tname varchar(64); 
 set @tname = CONCAT('sms_accpet',DATE_FORMAT(NOW(),'%Y%m')); 
 set @rname = CONCAT('create table ',@tname,' select * from sms_accpet');
 PREPARE create_table from @rname;
 EXECUTE create_table;

 delete from sms_accpet;

计时器实例

CREATE EVENT EVENT_SMS    
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 CALL backUpSms();

参谋网址:

积累进程:

定时器:

1.复制表结构及数据到新表

CREATE TABLE 新表
SELECT * FROM 旧表

2.只复制表结构到新表

CREATE TABLE 新表
SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
方法二:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)
CREATE TABLE 新表
LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

INSERT INTO 新表
SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

INSERT INTO 新表(字段1,字段2,…….)
SELECT 字段1,字段2,…… FROM 旧表

样例抽选

每天凌晨三点执行  
create event event_call_defer     
on schedule every 1 day starts date_add(date(curdate() + 1),interval 3 hour)  
on completion preserve enable  
do  
begin  
    call test.warn();  
end  

每个月的一号凌晨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定期调用存储进程,对表数据集表结构实行备份 存款和储蓄进程实例: CREATE
PROCEDURE backUpSms()BEGINDECLARE tname varchar(6肆)…

一、使用进度 壹.翻看当前是或不是已开启事件陈设(调治器)有叁种方法:

这段日子一段时间,笔者刚好进入一家新公司,并接替了那边的2个站点,由于那个站点的架构划设想计不太合理,导致MySQL的压力一直一点都不小,常常出现超时的Locked进度,于是编辑了一段Linux的Shell脚本来定期kill掉那个经过。
剧本如下:

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

复制代码 代码如下:

 

#!/bin/bash
mysql_pwd=”xxxxxx” #mysql的root密码
mysql_exec=”/usr/local/mysql/bin/mysql”
tmp_dir=”/tmp”
file_sh=”$tmp_dir/mysql_kill_locked.sh”
file_tmp=”$tmp_dir/mysql_kill_locked.tmp”
file_log=”$tmp_dir/mysql_kill_locked.log” #日志
$mysql_exec -uroot -p$mysql_pwd -e “show processlist” | grep -i
“Locked” > $file_tmp
cat $file_tmp >> $file_log
for line in `cat $file_tmp | awk ‘{print $1}’`
do
echo “$mysql_exec -uroot -p$mysql_pwd -e “kill $line”” >>
$file_sh
done
chmod +x $file_sh
sh $file_sh #实施一时脚本
> $file_sh #清空不常脚本
 

  1. 开启事件安插(调节器)按钮有4种方法:

末了,将这段脚本参预到crontab,定时推行就能够。

SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;

您恐怕感兴趣的篇章:

  • 选用Python发送邮件附属类小部件以定期备份MySQL的学科
  • Linux
    shell完结天天定期备份mysql数据库
  • CentOS下mysql定期备份Shell脚本分享
  • 福寿无疆MySQL定时批量检查表repair和优化表optimize
    table的shell脚本
  • MySQL按时备份之使用Linux下的crontab定时备份实例
  • 接纳mysql事件调整器定期去除binlog
  • 定期导出mysql本地数据替换远程数据库数据脚本分享
  • MySQL反应计时器EVENT学习笔记
  • MySQL定时执行脚本(布署职务)命令实例
  • MySQL定时器开启、调用完毕代码
  • 定期备份mysql, 定期切割nginx access
    log的主意
  • mysql
    让三个囤积进程定期作业的代码
  • windows下促成按时重启Apache与MySQL方法
  • 渐渐讲解MySQL中定期事件布署的开创

键值壹或然ON表示开启;0依然OFF表示关闭;
 
叁.有关事件布署的权位:
独立使用event调用SQL语句时,查看和创制须求用户具有event权限,调用该SQL语句时,须要用户具有执行该SQL的权位。伊芙nt权
限的安装保存在mysql.user表和mysql.db表的伊芙nt_priv字段中。(FLUSH
PRIVILEGES;)
当event和procedure合作使用的时候,查看和创造存款和储蓄进度须要用户具备create
routine权限,调用存款和储蓄进度实行时须求使用excute权限,存款和储蓄进度调用具体的SQL语句时,须求用户具有执行该SQL的权力。

SELECT HOST,USER,Event_priv FROM mysql.user;

图片 1

赢稳妥前登录的用户和数据库:SELECT CU讴歌MDXRENT_USER(), SCHEMA();
从Figure1能够明白bfsql@%是从未伊芙nt_priv权限的,在该用户下创设事件的时候会师世上边包车型地铁荒谬:
Error Code: 1044Access denied for user ‘bfsql’@’%’ to database ‘blog’
假诺出现上边的失实,实行下边包车型大巴SQL就足以给bfsql@%授予创制伊夫nt的权柄:

UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='bfsql'; 
FLUSH PRIVILEGES; 

终极,你能够透过SHOW GRANTS FOTiguan ‘bfsql’@’%’;查看全体权限;
 
四.创办事件:
(一)创立事件的语法如下:

CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement

(二)成立事件的躬行实践如下:

DELIMITER $$
CREATE EVENT IF NOT EXISTS e_blog
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO BEGIN
CALL MoveBlogData();
END$$
DELIMITER ;

 
DO
sql_statement字段表示该event必要实行的SQL语句或存款和储蓄进度。这里的SQL语句能够是复合语句,使用BEGIN和END标记符将复合SQL语句依据试行各样放在里面。

--从现在开始每隔九天定时执行 
CREATE EVENT EVENT1 
ON SCHEDULE EVERY 9 DAY STARTS NOW() 
ON COMPLETION PRESERVE ENABLE 
DO 
  BEGIN 
    CALL TOTAL(); 
  END 


--每个月的一号凌晨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 

 
5.事变开启与关闭:
敞开某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;

闭馆某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;

二、实例: mysql电火花计时器是系统给提供了event,而oracle里面包车型地铁反应计时器是系统给提供的job。废话少说,上边创立表:

create table mytable (
id int auto_increment not null,
name varchar(100) not null default '',
introduce text not null,
createtime timestamp not null,
constraint pk_mytable primary key(id)
)

创办存款和储蓄进程,这里的囤积进度首要提要求mysql的电火花计时器event来调用去推行:

create procedure mypro()
BEGIN
insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());
end;

此间只是简单的写了一晃,只是为着求证例子。

紧接着创制mysql的反应计时器event:

create event if not exists eventJob 
on schedule every 1 second 
on completion PRESERVE
do call mypro();

此处设置为每1秒推行一次

迄今全体的希图干活早已写完了,做完这个,mysql要想行使计时器必须的做计划工作,正是把mysql的坚持计时器给张开了:

SET GLOBAL event_scheduler = 1; -- 启动定时器
SET GLOBAL event_scheduler = 0; -- 停止定时器

进而还要敞开事件:

ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE;  -- 开启事件
ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE; -- 关闭事件


SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态

至此,你去数据Curry面包车型大巴表mytable里面看下,系统会每隔壹秒去插入一条数据,嘻嘻,任务成功了。

select * from mytable

你恐怕感兴趣的篇章:

  • mysql Event Scheduler: Failed to open table
    mysql.event
  • MySQL放大计时器EVENT学习笔记
  • MySQL布置职务(事件调解器) 伊夫nt
    Scheduler介绍
  • mysql中event的用法详解
  • MySQL 伊芙nt
    Scheduler(事件调整器)
  • MySQL定时试行脚本(布署职务)命令实例
  • MySQL停车计时器开启、调用实今世码
  • Linux
    shell达成每一天定时备份mysql数据库
  • 详解MySQL用事件调整器伊夫nt
    Scheduler创设定期职分

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图