【问题标题】:Automation of mysql partitioningmysql分区自动化
【发布时间】:2018-10-14 19:17:22
【问题描述】:

我搜索了很多关于 mysql 分区自动化的信息。 但不幸的是,没有任何问题可以解决。 我想删除一个不需要的旧分区,但同时将新的即将到来的数据添加到分区。 我可以在这里做的是每天删除一个旧分区并使用mysql的一些自动化功能创建新分区,例如MONTH(NOW()-interval 2 month)等。 但它会增加运营成本,因为我每天晚上都需要为新数据重新创建分区。 我发现我可以使用按范围分区,但所有硬编码示例都表明我可能需要在每次添加新数据时进行分区。

这是我找到的一个示例,但与我不太相似:

ALTER TABLE t1 PARTITION BY 
RANGE(TO_DAYS(FROM_UNIXTIME(transaction_date)))(
PARTITION JAN VALUES LESS THAN (TO_DAYS('2013-02-01')),
PARTITION FEB VALUES LESS THAN (TO_DAYS('2013-03-01')),
PARTITION MAR VALUES LESS THAN (TO_DAYS('2013-04-01')),
PARTITION APR VALUES LESS THAN (TO_DAYS('2013-05-01')),
PARTITION MAY VALUES LESS THAN (TO_DAYS('2013-06-01')),
PARTITION JUN VALUES LESS THAN (TO_DAYS('2013-07-01')),
PARTITION JUL VALUES LESS THAN (TO_DAYS('2013-08-01')),
PARTITION AUG VALUES LESS THAN (TO_DAYS('2013-09-01')),
PARTITION SEP VALUES LESS THAN (TO_DAYS('2013-10-01')),
PARTITION `OCT` VALUES LESS THAN (TO_DAYS('2013-11-01')),
PARTITION NOV VALUES LESS THAN (TO_DAYS('2013-12-01')),
PARTITION `DEC` VALUES LESS THAN (TO_DAYS('2014-01-01'))
);

请给我一个正确的方法。

【问题讨论】:

    标签: mysql partitioning partition database-partitioning alter


    【解决方案1】:

    没有完全自动化的方法——你需要编写代码。

    但首先,让我们解决一个问题。有另一个分区:

    PARTITION future VALUES LESS THAN (MAXVALUE)
    

    如果您在某天晚上不小心滚动分区失败,这将派上用场。

    还有一个错误:您的表基本上没有完整的 12 个月的数据。隔板滑动后,您将只有 11 个月。那样可以么?如果没有,请保留 13 个月,而不是 12 个月。

    现在需要一些代码来完成这项工作,也许还有一些提示:http://mysql.rjweb.org/doc.php/partitionmaint

    【讨论】:

      【解决方案2】:

      你可以这样做。这将自动将数据存储在相应的分区中。关于截断它们的自动化,我也在探索创建预定事件。

      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) */ |
      

      这也可以扩展到创建基于一周的分区。

      【讨论】:

        猜你喜欢
        • 2015-11-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多