mysql 历史数据表迁移方案

当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表、登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到。

 

解决方案:创建一张与A表字段一样的B表,每天定时把A表昨天的数据插入到B表,再把A表昨天之前的数据删除,也可以根据需求改成一个月一次。如果不想只保存到一张表里,也可以在存储过程中,以年月份为后缀每次新建表。

 

1、首先创建一个存储过程

DELIMITER $$

/*数据库名称*/
USE `dbcp`$$

/*存储过程名称*/
DROP PROCEDURE IF EXISTS `apaas_log_procedure`$$

CREATE DEFINER=`apaas_log`@`%` PROCEDURE `apaas_log_procedure`()
BEGIN
	SET @current_time = NOW();
	
	/*备份昨天之前的数据*/
	INSERT INTO `apaas_log_copy`
	SELECT * FROM `apaas_log`
	WHERE DATEDIFF(`create_Date`,@current_time) < 0;
	/*删除昨天之前的数据*/
	DELETE FROM `apaas_log`
	WHERE DATEDIFF(`create_Date`,@current_time) < 0;
	
	/*备份昨天之前的数据*/
	INSERT INTO `apaas_log_unqualified_copy`
	SELECT * FROM `apaas_log_unqualified`
	WHERE DATEDIFF(`create_Date`,@current_time) < 0;
	/*删除昨天之前的数据*/
	DELETE FROM `apaas_log_unqualified`
	WHERE DATEDIFF(`create_Date`,@current_time) < 0;
    END$$

DELIMITER ;

 

2、创建定时事件

DELIMITER $$

/*每天4点执行*/

ALTER DEFINER=`apaas_log`@`%` EVENT `apaas_log_event` 
ON SCHEDULE EVERY 1 DAY STARTS '2019-02-19 04:00:00' 
ON COMPLETION PRESERVE ENABLE DO CALL apaas_log_procedure()$$

DELIMITER ;

 

3.启动定时任务

/*启动定时任务*/
SET GLOBAL event_scheduler = 1
/*关闭定时任务*/
SET GLOBAL event_scheduler = 0
/*查看定时任务状态*/
SHOW VARIABLES LIKE '%event_sche%'

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛哥是个大帅比

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值