错误1526(HY000):表没有值1426566990的分区

时间:2015-04-17 08:51:47

标签: mysql

我的mysql服务器无法分区:

mysql服务器版本是:5.1.71-log

操作系统:CentOS 6.5 x64

mysql>show create table 
| history | CREATE TABLE `history` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`value` double(16,4) NOT NULL DEFAULT '0.0000',
`ns` int(11) NOT NULL DEFAULT '0',
KEY `history_1` (`itemid`,`clock`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |


mysql>select * from history limit 11;
+--------+------------+--------------+-----------+
| itemid | clock      | value        | ns        |
+--------+------------+--------------+-----------+
|  35210 | 1426566411 |  189626.1400 | 856563617 |
|  35211 | 1426566414 |  328805.1900 |   3954734 |
|  35231 | 1426566432 |  497665.5600 | 124983500 |
|  35232 | 1426566433 |  839002.1200 |  66033134 |
|  35252 | 1426566453 |  175085.9200 |  58097601 |
|  35253 | 1426566454 |  113664.0000 | 104347387 |
|  35273 | 1426566474 |   11188.8300 |  95493093 |
|  35274 | 1426566475 |   12394.8100 | 109145645 |
|  35168 | 1426566969 | 2793042.2500 | 919270427 |
|  35169 | 1426566970 | 1148138.7500 | 649565410 |
|  35189 | 1426566990 |   65273.8800 | 718286083 |
+--------+------------+--------------+-----------+
11 rows in set (0.00 sec)

mysql> alter table history partition by range (clock)(partition p1 values less than(1426566990));
ERROR 1526 (HY000): Table has no partition for value 1426566990

但是,表中已有的值,为什么会出现错误?

谁能帮帮我?

2 个答案:

答案 0 :(得分:3)

问题是服务器不知道在哪里放置值为1426566990的行。 less than条件不包含在内。这意味着你应该使用less than(1426566991)来实现这一点。但是,如果您决定添加值大于或等于1426566991的新行,则会收到相同的错误。因此,我建议采用以下方法:

alter table history partition by range (clock)(partition p1 values less than MAXVALUE);

有关范围分区的更多信息:RANGE Partitioning。您的案例有一个例子:

  

< ...>在此方案下,没有规则涵盖store_id大于20的行,因此导致错误,因为服务器不知道将其放在何处。

答案 1 :(得分:0)

@Xokker

:)

稍后如何扩展分区。

我尝试使用以下代码:

alter table history add partition(partition p3 values less than (1426567221));
ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition

有其他方法来扩展分区,还没有影响数据库性能吗?