mysql中定时删除N天前以时间命名的数据表
来源:互联网 发布:手机淘宝差评怎么删 编辑:程序博客网 时间:2024/06/05 09:58
最近在做一个log管理。具体情形是这样的,在mysql中每天产生一个log数据表,要求自动删除N天前的数据表。之前对这方面没什么了解,查了很多资料,都是很抽象的从一个高度上讲了讲。在此,记录一下实现过程,供有需要的童鞋参考。写的可能有点笨拙,欢迎讨论,共同提高~
实现过程中用到了mysql中的存储过程(procedure)和定时器(event)。需要注意的是,mysql从5.1版本才开始支持定时器。
1、查看mysql版本
mysql> select version();
2、查看定时器开关
mysql> show variables like '%sche%';
+---------------------------------------------------+---------+
| Variable_name | Value |
+---------------------------------------------------+---------+
| event_scheduler | ON |
+---------------------------------------------------+---------+
| Variable_name | Value |
+---------------------------------------------------+---------+
| event_scheduler | ON |
如果value值为OFF,可以这样打开:
set GLOBAL event_scheduler=1;
想关闭,只需设置为0即可。
3、创建测试用数据表
mysql> create table 2013_04_15
-> (
-> id int(11) not null auto_increment primary key,
-> time datetime not null
-> );
-> (
-> id int(11) not null auto_increment primary key,
-> time datetime not null
-> );
我想删除一年之前的数据表。
4、创建存储过程
mysql> delimiter //
mysql> drop procedure if exists del//
mysql> create procedure del()
-> BEGIN
-> select date_format(DATE_SUB(now(),INTERVAL 1 YEAR),'%Y_%m_%d') into @tf;
-> set @sql = concat('drop table if exists ',@tf);
-> PREPARE stml FROM @sql;
-> EXECUTE stml;
-> END//
mysql> delimiter ;
mysql> create procedure del()
-> BEGIN
-> select date_format(DATE_SUB(now(),INTERVAL 1 YEAR),'%Y_%m_%d') into @tf;
-> set @sql = concat('drop table if exists ',@tf);
-> PREPARE stml FROM @sql;
-> EXECUTE stml;
-> END//
mysql> delimiter ;
注释:
- 第一行delimiter //,设置mysql的定界符,默认是分号,即当以分号结束时,执行输入的mysql命令。但有时不希望这样,故需要重新定义界定符,本例中使用双斜杠,注意再设置回来,上述最后一行sql语句即是。
- 第二行drop procedure if exists del//,判断是否已经存在名为del的procedure。如果存在就删除。
- 创建名为del的procedure。BEGIN起始,END结束。
- select date_format(DATE_SUB(now(),INTERVAL 1 YEAR),'%Y_%m_%d') into @tf;根据今天的日期,生成一年前的日期串,格式形如2013_04_15,存放在变量tf中。
- set @sql = concat('drop table if exists ',@tf);构造删除表的sql语句。
- PREPARE stml FROM @sql;EXECUTE stml; 执行sql语句。
5、创建定时器
mysql> drop event if exists del_event;
mysql> create event del_event
-> on schedule every 3 minute(定时器执行的时间间隔,测试中,我使用的3分钟)
-> on completion preserve disable
-> do call del();
mysql> create event del_event
-> on schedule every 3 minute(定时器执行的时间间隔,测试中,我使用的3分钟)
-> on completion preserve disable
-> do call del();
6、上述定时器打开与关闭
定时器的打开
mysql> alter event del_event on completion preserve enable;
关闭定时器
mysql> alter event del_event on completion preserve disable;
更详细的存储过程学习,可以参考http://www.ccvita.com/100.html
0 0
- mysql中定时删除N天前以时间命名的数据表
- 删除数据表中某个时间前的所有数据
- MySQL创建定时event删除N天前数据
- CentOS下面定时删除N天前的文件
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
- Linux下定时删除指定目下n天前的文件
- Linux下定时删除指定目下n天前的文件
- 【转】Linux下定时删除指定目下n天前的文件
- Windows 定时删除指定路径下N天前的日志文件
- 定时备份mysql数据库 并删除7天前的备份 (windows linux )
- php 定时备份mysql数据库 并删除8天前的记录
- Linux下每天定时备份mysql数据库并删除7天前的备份文件
- 删除N天前的日志文件
- linux 删除N天前的文件
- 删除N天前的log4j日志
- windows服务等获取文件路径文件目录方法
- MVC设计模式
- linux zip/unzip命令
- d3的scale()函数
- (code jam)Problem B. Cookie Clicker Alpha
- mysql中定时删除N天前以时间命名的数据表
- 事实表和维度表
- oracle 新手注意事项(转)
- 阿里面试
- 如何设置一个可扩展的MongoDB数据库?
- Linux进程含义知多少
- 优秀程序员必须知道的32个算法,提高你的开发效率
- [Unity3D] 使用Google Drive发布Unity3D Web程序
- 解决异常java.lang.UnsatisfiedLinkError: Unable to load library 'virt'