mysql - mysql分区的自动化

标签 mysql partitioning partition database-partitioning alter

我搜索了很多关于 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/

相关文章:

postgresql - 从一组表中逐个执行 SELECT

mysql - 索引如何与 MySql 分区表一起使用

php - PHP 中的 SQL 查询仅适用于函数之外

php - 转移到同数据库的其他表mysql,有些字段是手动插入的,但直接删除源数据

scheduling - 变量分支与约束分支

Hive 外部表不显示分区

java - Partitioned Job 完成后不能自己停止?春批

mysql - 合并具有不同ID但相同数据的MySQL行

php - Jquery AJAX 发布到 PHP 不起作用

mysql - Mysql 分区 - Key vs Hash vs List vs Range