MySQL每天自动增加分区

文章非原创,转载 https://www.cnblogs.com/lanceblog/p/5532068.html 博客内容。 

 

 

1、在进行自动增加分区前一定得先对表手动分几个区,时间字段为unxitime

ALTER TABLE tablename PARTITION BY RANGE (time)
(
    PARTITION p20160523 VALUES LESS THAN unix_timestamp('2016-05-23'),
    PARTITION p20160524 VALUES LESS THAN unix_timestamp('2016-05-24'),
    PARTITION p20160525 VALUES LESS THAN unix_timestamp('2016-05-25'),
    PARTITION p20160526 VALUES LESS THAN unix_timestamp('2016-05-26'),
    PARTITION p20160527 VALUES LESS THAN unix_timestamp('2016-05-27')
)

2、创建生成分区的存储过程

 

DELIMITER $$

USE `nres`$$

DROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$

CREATE DEFINER=`nres`@`%` PROCEDURE `create_Partition_3Ahuadan`()
BEGIN
/* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
    DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
    START TRANSACTION;
 
/* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
    SELECT REPLACE(partition_name,'p','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS 
    WHERE table_name='tablename' ORDER BY partition_ordinal_position DESC LIMIT 1;
     SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
/* 修改表,在最大分区的后面增加一个分区,时间范围加1天 */
    SET @s1=CONCAT('ALTER TABLE tablename ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN unxi_timestamp(''',DATE(@Max_date),'''))');
    /* 输出查看增加分区语句*/
    SELECT @s1;
    PREPARE stmt2 FROM @s1;
    EXECUTE stmt2;
    DEALLOCATE PREPARE stmt2;
/* 取出最小的分区的名称,并删除掉 。
    注意:删除分区会同时删除分区内的数据,慎重 */
    /*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS 
    where table_name='tablename' order by partition_ordinal_position limit 1;
    SET @s=concat('ALTER TABLE tablename DROP PARTITION ',@P0_Name);
    PREPARE stmt1 FROM @s; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stmt1; */
/* 提交 */
    COMMIT ;
 END$$

DELIMITER ;

 

3、创建定时器,每日触发存储过程

DELIMITER ||  
CREATE EVENT Partition_3Ahuadan_event  
          ON SCHEDULE  
          EVERY 1 day STARTS '2016-05-27 23:59:59'   
          DO  
      BEGIN  

          CALL nres.`create_Partition_3Ahuadan`;  
        
 END ||  
DELIMITER ;

 

转载于:https://www.cnblogs.com/huangjinbin/p/8668852.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值