mysql每个月定时切分出一张月份新表

1,178 阅读1分钟

需求:

现在有一张日志表log。需要每个月的25号,将日志转到log_当前月份去。同时生成一张新的log表。


新建一张测试表 test_table_rename

1,解决动态生成表名的问题

我们可以用set @var=...设置变量,然后用prepare stml from @var设置动态sql语句,最后用EXECUTE stml;执行语句。

SET @sqlstr = CONCAT('rename table test_table_rename to test_table_rename_',DATE_FORMAT(CURDATE(),'%Y_%m'));PREPARE stmt1 FROM @sqlstr ;EXECUTE stmt1 ;


2,开启定时任务

写一个一次性的测试任务

CREATE EVENT e_test_renameON SCHEDULE AT CURRENT_TIMESTAMP+INTERVAL 50 SECONDDOBEGIN  SET @sqlstr = CONCAT('rename table test_table_rename to test_table_rename_',DATE_FORMAT(CURDATE(),'%Y_%m'));  PREPARE stmt1 FROM @sqlstr;  EXECUTE stmt1;create table test_table_rename(id int auto_increment primary key,create_time datetime default CURRENT_TIMESTAMP null)comment '用来测试重命名的表';END;


3,最后的定时任务

CREATE EVENT e_test_renameON SCHEDULE EVERY 1 MONTHSTARTS DATE_ADD(DATE_ADD('2020-05-25', INTERVAL 1 MONTH), INTERVAL 30 MINUTE)DOBEGIN  SET @sqlstr = CONCAT('rename table test_table_rename to test_table_rename_',DATE_FORMAT(CURDATE(),'%Y_%m'));  PREPARE stmt1 FROM @sqlstr;  EXECUTE stmt1;END;

每个月的25号的零点三十分执行一次


关于定时任务的详细说明可以看我另一片文章

Mysql中的定时任务操作

mp.weixin.qq.com/s?__biz=Mzg…