mysql分区自动化

x759pob2  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我已经搜索了很多关于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'))
);

请给我建议一个合适的方法。

dz6r00yl

dz6r00yl1#

没有完全自动化的方法——您需要编写代码。
但首先,让我们解决一个问题。有另一个分区:

PARTITION future VALUES LESS THAN (MAXVALUE)

如果你某天晚上不小心没能把隔板卷起来,这会派上用场的。
还有一个bug:您的表实际上从来没有完整的12个月的数据。仅仅在滑动分区之后,您将只有11个月的时间。可以吗?如果没有,就保留13个月,而不是12个月。
下面是一些代码,再加上一些提示:http://mysql.rjweb.org/doc.php/partitionmaint

相关问题