1. 程式人生 > >MySQL每天自動增加分割槽

MySQL每天自動增加分割槽

1、在進行自動增加分割槽前一定得先對錶手動分幾個區

 ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime))
 (
     PARTITION p20160523 VALUES LESS THAN (TO_DAYS('2016-05-23')),
     PARTITION p20160524 VALUES LESS THAN (TO_DAYS('2016-05-24')),
     PARTITION p20160525 VALUES LESS THAN (TO_DAYS('2016-05-25')),
     PARTITION p20160526 VALUES LESS THAN (TO_DAYS('2016-05-26')),
     PARTITION p20160527 VALUES LESS THAN (TO_DAYS('2016-05-27'))
 )
2、分割槽存過如下:

     DELIMITER $$

    USE `sdk`$$

      ROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$
      CREATE DEFINER=`root`@`localhost` PROCEDURE `create_Partition_3Ahuadan`()
      EGIN
      /* 事務回滾,其實放這裡沒什麼作用,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='tb_3a_huandan_detail' 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 tb_3a_huandan_detail ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (TO_DAYS (''',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='tb_3a_huandan_detail' order by partition_ordinal_position limit 1;
       SET @s=concat('ALTER TABLE tb_3a_huandan_detail 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/lanceblog/p/5532068.html