我的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
但是,表中已有的值,为什么会出现错误?
谁能帮帮我?
答案 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
有其他方法来扩展分区,还没有影响数据库性能吗?