mysql存储过程实现数据备份-------按照主库,从库,年份,条件字段等条件进行备份

1、整理之前做的项目的时候,找到之前公司中一个项目上线时写的一个数据备份得存储过程,这个存储过程是按照主库名,从库名,
以及表名,年份等字段进行数据备份得,挺有意思,正好复习一下存储过程。

DROP PROCEDURE IF EXISTS bakup;
CREATE PROCEDURE bakup(IN `todba` varchar(252),IN `zdba` varchar(252),IN `tbnm` varchar(252),IN `field` varchar(252),IN `year` varchar(252))
BEGIN 
DECLARE `@i` int(11);
DECLARE `@ai` VARCHAR(252);
DECLARE `@todba` VARCHAR(252);
DECLARE `@zdba` VARCHAR(252);
DECLARE `@tbnm` VARCHAR(252);
DECLARE `@year` VARCHAR(252);
DECLARE `@field` VARCHAR(252);
DECLARE `@siteCount` int(11);
DECLARE `@sqlstr` VARCHAR(2560); 
DECLARE `@sqlinsert` VARCHAR(2560);
DECLARE `@di` VARCHAR(252);
DECLARE `@lday` VARCHAR(252);
DECLARE `@dday` VARCHAR(252);
DECLARE `@ymonth` int(11);
DECLARE `@yyear` int(11);
set `@i`=1;
set `@todba`=CONCAT(todba,'.');
set `@zdba`=CONCAT(zdba,'.');
set `@tbnm`=tbnm;
set `@field`=field;
set `@year`=year;
set `@ai`='01';
set `@di`='01';
SELECT YEAR(now()) into `@yyear`;
IF `@year` < `@yyear`
    THEN  
        set `@ymonth`=13;
ELSE 
        SELECT MONTH(now())+1 into `@ymonth`;
END IF;
bawhile:WHILE `@i`<`@ymonth` DO
SELECT last_day(CONCAT(`@year`,`@ai`,`@di`)) into `@lday`;
set `@dday`=REPLACE(`@lday`,'-','');
SET @sqlstr = CONCAT('create table if not exists ',`@todba`,`@tbnm`,'_',`@year`,`@ai`,' as select * from ',`@zdba`,`@tbnm`,' where ',`@field`,' between ',`@year`,`@ai`,`@di`,' and ', `@dday`
); 
prepare stmt from @sqlstr; 
execute stmt;
SET `@i`= `@i`+1;
IF `@i` < 10
    THEN  
        set `@ai`=CONCAT('0',`@i`);
ELSE 
        set `@ai`=CONCAT(`@i`);
END IF;
END WHILE; 
END
发布了21 篇原创文章 · 获赞 3 · 访问量 1033

猜你喜欢

转载自blog.csdn.net/qq_37603187/article/details/104260223