MySQL数据库表始终保持最近两个月的记录

实现自动备份的方法很多,这里说的是客户需要始终保持某个表中存储两个月的记录,以便保持性能。过期数据我们建议存储到另外一个表中,以备以后查询使用。
我们采用存储过程+linux Crontab的方式实现。

创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `bl_order_bak`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
-- 将旧表数据暂存起来
drop table if exists `bl_order_old`;
create table `bl_order_old` as (select * from bl_order);
-- 将超过两个月的数据保存到一个以时间为后缀的表中
set @str = date_format(now(), '%Y%m%d%H%i%s');
set @SQLString = CONCAT('create table bl_order_',@str,' as (select * from bl_order where add_time < date_sub(now(),interval 2 month))');
PREPARE stmt from @SQLString;
EXECUTE stmt; 
-- 删除这些已经备份的数据,并清理表的空间
delete from `bl_order` where add_time < date_sub(now(),interval 2 month);
optimize table `bl_order`;
END

为执行此存储过程创建脚本

#!/bin/bash
mysql -hlocalhost -uroot -pbei666999 -P3306 -e "call  boli.bl_order_bak" ;

将文件存储起来:File:/data/order_bak.sh
并赋予执行权限:chmod +x /data/order_bak.sh

创建计划任务

crontab -e
59 23 1 * * sh /webdata/order_bak.sh

设定每月1号23点59分执行脚本调用存储过程。

    原文作者:Tianby
    原文地址: https://segmentfault.com/a/1190000015279998
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞