闲来没事,写了一个删除zactemp(我们的备份库)180以前备份表的存储过程。配合定时任务每天跑,就可以做到自动删除180天前的临时表了。
存储过程如下:
delimiter $$
CREATE procedure drop_table()
BEGIN
declare t_name varchar(100);
declare isFinished int default false;
declare log_table_list cursor for (select t.table_name from information_schema.`TABLES` t where t.TABLE_SCHEMA = 'zactemp' and t.CREATE_TIME <= date_add(now(),interval -180 day));
declare continue handler for not found set isFinished=true;
open log_table_list;
repeat
fetch log_table_list into t_name;
if isFinished = false then
set @@session.sql_log_bin=0;
set @sqltext=concat('drop table zactemp.',t_name,';');
PREPARE c_tab_stat from @sqltext;
execute c_tab_stat;
set @@session.sql_log_bin=1;
end if;
until isFinished
end repeat;
close log_table_list;
END $$
delimiter ;
定时任务:
CREATE DEFINER=`zd_dba`@`%` EVENT `drop_zactemp_table` ON SCHEDULE EVERY 1 DAY STARTS '2019-08-22 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO call zactemp.drop_table()