繁体   English   中英

MySQL 分区的计划截断

[英]Scheduled truncation of MySQL Partitions

我有一个带有审计表的 MySQL(5.6 版)数据库,用于存储与库存相关的所有事务。 我根据事件的交易日期的月份对表进行了分区。 所以桌子看起来像这样。

ENGINE=InnoDB AUTO_INCREMENT=13726377500 DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE ( month(creationDate))
(PARTITION p0 VALUES LESS THAN (2) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (3) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (4) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (5) ENGINE = InnoDB,
 PARTITION p4 VALUES LESS THAN (6) ENGINE = InnoDB,
 PARTITION p5 VALUES LESS THAN (7) ENGINE = InnoDB,
 PARTITION p6 VALUES LESS THAN (8) ENGINE = InnoDB,
 PARTITION p7 VALUES LESS THAN (9) ENGINE = InnoDB,
 PARTITION p8 VALUES LESS THAN (10) ENGINE = InnoDB,
 PARTITION p9 VALUES LESS THAN (11) ENGINE = InnoDB,
 PARTITION p10 VALUES LESS THAN (12) ENGINE = InnoDB,
 PARTITION p11 VALUES LESS THAN (13) ENGINE = InnoDB,
 PARTITION p12 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ |

我的用例是我想每个月截断旧分区(在 15 日,因为我需要最后 15 天的交易)。 有没有办法通过创建事件来实现这一点? 有人可以帮助我吗?

弄清楚了。 我可以通过使用语句和变量创建事件来实现它。

delimiter |
//Creating an event 
Create event scheduledTruncate
    // this is used to indicate that it's a recurring event
    on schedule  every 30 day 
    // starting time. end time can also be provided. If nothing is provided, then it's null
    starts '2021-03-15 20:24:50'
    DO
      BEGIN
      //Essentially identifying the last months partition. -2 since we start indexing from p0.
      SET @var_par = CONCAT('p',MONTH(CURDATE()) - 2);
      // The initial months where in january, we have to truncate the december table
      IF MONTH(CURDATE()) < 2
        SET @var_par = CONCAT('p',MONTH(CURDATE()) + 10);
      // creating a mysql statement using the above created variables
      SET @s = CONCAT('alter table xyz truncate partition ', @var_par);
      PREPARE STATEMENT from @s;
      //executing the statement
      EXECUTE STATEMENT;
      END |

delimiter ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM