我搜索了很多关于 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'))
);
请建议我一个正确的方法。
最佳答案
没有完全自动化的方法——您需要编写代码。
但首先,让我们解决一个问题。有另一个分区:
PARTITION future VALUES LESS THAN (MAXVALUE)
如果您有一天晚上不小心无法滚动分区,这会派上用场。
还有一个 bug:您的表基本上从来没有完整的 12 个月的数据。隔断一滑动之后,你的时间就只有 11 个月了。这可以吗?如果不是,请保留 13 个月,而不是 12 个月。
现在需要一些代码来完成这项工作,也许还有更多提示:http://mysql.rjweb.org/doc.php/partitionmaint
关于mysql - mysql分区的自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172595/