小编在用mysql数据库做备份时,遇到了一个小问题,我设置了每天定时对我的数据库进行整体备份,但是因为数据库较大,每天备份的数据库文件较多,内存占用也很大,所以我想在备份的同时可以删除之前指定时间的备份文件或者数据库表。该怎么解决呢?
小编查询了很多资料,终于发现可以通过创建存储过程实现删除:
delimiter $
create procedure dropTablePro(in h int(2), in m int(2), in suffix varchar(8))
begin
/* h 小时 , m 分钟 */
-- 小时计数器
declare h_cnt int(2) default 1;
-- 分钟计数器
declare m_cnt int(2) default 1;
declare tab_name varchar(32) default '';
loop1: while(h_cnt <= h) do
loop2: while(m_cnt <= m) do
-- 拼接表名
if(m_cnt < 10) then
set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), '0', CAST(m_cnt AS CHAR), suffix);
else
set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), CAST(m_cnt AS CHAR), suffix);
end if;
set @dropSql = concat('drop table if exists ', tab_name);
prepare droptab from @dropSql;
execute droptab;
deallocate prepare droptab;
set m_cnt = m_cnt + 1;
end while loop2;
set m_cnt = 1;
set h_cnt = h_cnt + 1;
end while loop1;
end;
delimiter ;
可以调用存储过程实现删除: call dropTablePro(12, 60, 'abc'); 说明:删除当前时间前12小时,且后缀为 'abc' 的表;当然这里也可以换成数据库文件名字。
原来数据库还有很多巧妙的功能等着我们去发现和使用,有时候一些小的功能对我们操作数据库真的很有帮助。