MySQL 大表数据定期归档
数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档。 1 - 创建一个新表,表结构和索引与旧表一模一样 create table table_news like table_name; 2 - 新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除 delimiter $ create procedure sp() begin insert into tb_new select * from table_namewhere create_time < NOW() - INTERVAL 30 DAY; delete from db_smc.table_namewhere create_time < NOW() - INTERVAL 30 DAY; end 3 - 创建EVENT,每天晚上凌晨00:00定时执行上面的存储过程 create event if not exists event_temp on schedule every 1 day on completion preserve do call sp(); 备注: 第一次执行存储过程的时候因为历史数据过大, 可能发生意外让该次执行没有成功。重新执行时会遇到报错ERROR 1205 (HY000): Lock wait timeout exceeded;