mysqlpartitiontableuseto_daysbug

to_days分区表 bug

CREATE TABLE `aaaaaaaaaa` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `day` int(2) NOT NULL,
  `startTime` datetime NOT NULL,
  `endTime` datetime NOT NULL,
  `version` varchar(12) NOT NULL DEFAULT '',
  `source` varchar(12) NOT NULL DEFAULT '',
  `sid` varchar(12) NOT NULL,
  `valid` int(8) NOT NULL,
  `error` int(8) NOT NULL,
  `total` int(8) NOT NULL,
  PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`),
  KEY `aaaaaaaaaa_index_startTime` (`startTime`),
  KEY `aaaaaaaaaa_index_endTime` (`endTime`),
  KEY `aaaaaaaaaa_muti_index` (`year`,`month`,`source`),
  KEY `aaaaaaaaaa_index_source` (`source`),
  KEY `month_index` (`month`),
  KEY `year_index` (`year`)
) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
 PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
 PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
 
 
  执行下面的sql,MySQL 会crash
 select sid as sid,source as source,sum(valid) as valid,sum(error) as error from aaaaaaaaaa where startTime>="2016-07-08 10:00:00" 
 
  通过下面的方法可以fix
 alter table aaaaaaaaaa add PARTITION  (partition p_max values less than(maxvalue));
 


另:

CREATE TABLE `aaaaaaaaaa` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `day` int(2) NOT NULL,
  `startTime` datetime NOT NULL,
  `endTime` datetime NOT NULL,
  `version` varchar(12) NOT NULL DEFAULT '',
  `source` varchar(12) NOT NULL DEFAULT '',
  `sid` varchar(12) NOT NULL,
  `valid` int(8) NOT NULL,
  `error` int(8) NOT NULL,
  `total` int(8) NOT NULL,
  PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`)
  ) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
 PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
 PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
 
 这样不会出现上面的问题
 
 
 
 但如果把starttime列加上索引 ,就会有这个问题
 CREATE TABLE `aaaaaaaaaa` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `day` int(2) NOT NULL,
  `startTime` datetime NOT NULL,
  `endTime` datetime NOT NULL,
  `version` varchar(12) NOT NULL DEFAULT '',
  `source` varchar(12) NOT NULL DEFAULT '',
  `sid` varchar(12) NOT NULL,
  `valid` int(8) NOT NULL,
  `error` int(8) NOT NULL,
  `total` int(8) NOT NULL,
  PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`),
  KEY `aaaaaaaaaa_index_startTime` (`startTime`)
) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
 PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
 PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
 
 MOS没有找到相关的bug
 5.1 5.6 中都没有这个问题,5.5.24中有这个问题
 
转载请注明源出处
QQ 273002188 欢迎一起学习
QQ 群 236941212
oracle,mysql,PG 相互交流

文章标题:mysqlpartitiontableuseto_daysbug
路径分享:http://bzwzjz.com/article/gdijgs.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 移动手机网站制作 网站建设方案 盐亭网站设计 重庆手机网站建设 成都网站建设公司 网站建设公司 成都网站制作 成都模版网站建设 成都网站建设 专业网站设计 H5网站制作 成都网站制作 企业网站设计 成都网站设计公司 网站制作 成都定制网站建设 外贸营销网站建设 定制网站设计 成都网站建设 营销型网站建设 成都网站建设 营销网站建设