mysql每天自动新建分区,删除分区和备份

1:新增分区

CREATE DEFINER=`root`@`%` PROCEDURE `proc_create_partition`(`tableName` varchar(128),`timeColName` varchar(128))
BEGIN
	DECLARE p_id int;
    DECLARE nextDate date;
    DECLARE lastDate LONG;
    DECLARE p_name varchar(16);
    
    SELECT COUNT(partition_name) INTO p_id 
    FROM INFORMATION_SCHEMA.partitions
    WHERE TABLE_NAME=tableName;
    
    IF p_id=0 THEN
        
        SELECT DATE_ADD(CURDATE(),INTERVAL 1 DAY) INTO nextDate  
        FROM DUAL;
 
        SET p_name=DATE_FORMAT(CURDATE(),%Y%m%d);
        SET @v_add=CONCAT(ALTER table ,tableName
                , PARTITION by range(TO_DAYS(
                , timeColName
                ,))(partition 
                , CONCAT(p,p_name)
                , values less than (TO_DAYS("
                , nextDate,"))));
 
   ELSE
 
        SELECT max(partition_description) des INTO lastDate 
        FROM INFORMATION_SCHEMA.partitions 
        WHERE TABLE_NAME=tableName;
 
        SELECT DATE_ADD(FROM_DAYS(lastDate),INTERVAL 1 DAY) INTO nextDate 
        FROM DUAL;
 
        SET p_name=DATE_FORMAT(FROM_DAYS(lastDate),%Y%m%d);
        SET @v_add=CONCAT(alter table ,tableName
                , add partition (partition 
                , CONCAT(p,p_name)
                , values less than (TO_DAYS("
                ,nextDate,"))));
    END IF; 
 
     PREPARE stmt from @v_add;
     EXECUTE stmt;
     DEALLOCATE PREPARE stmt;

END

2:删除分区

CREATE DEFINER=`root`@`%` PROCEDURE `proc_drop_paratition`(`tableName` varchar(128),`existDay` int)
BEGIN
    DECLARE p_id int;
    DECLARE p_name varchar(16);
 
    SELECT COUNT(partition_name) into p_id 
    FROM INFORMATION_SCHEMA.PARTITIONS 
    WHERE TABLE_NAME=tableName;
    
    IF p_id > existDay THEN 
    
      SELECT PARTITION_NAME into p_name 
      FROM INFORMATION_SCHEMA.PARTITIONS 
      WHERE TABLE_NAME=tableName
      ORDER BY partition_ordinal_position LIMIT 1;
      
      IF p_name is not null THEN 
          SET @v_add=CONCAT(alter table ,tableName, drop partition ,p_name);
          PREPARE stmt from @v_add;
          EXECUTE stmt;
          DEALLOCATE PREPARE stmt;
       END IF; 
    END IF;  
END
经验分享 程序员 微信小程序 职场和发展