1.环境
1 master 和 1 slave2.某张表的数据量达到了2亿左右,size大概在200G左右| 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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |现在想把这张表转成range(clock)类型的分区表
alter table history partition by range(clock)(
partition p0 value less than (UNIX_TIMESTAMP('2013-04-01 08:00:00')),
partition p1 value less than (UNIX_TIMESTAMP('2013-05-01 08:00:00')),
partition p2 value less than (UNIX_TIMESTAMP('2013-06-01 08:00:00')),
partition p3 value less than (UNIX_TIMESTAMP('2013-07-01 08:00:00')),
partition p4 value less than (UNIX_TIMESTAMP('2013-08-01 08:00:00')),
partition p5 value less than (UNIX_TIMESTAMP('2013-09-01 08:00:00')),
partition p6 value less than (UNIX_TIMESTAMP('2013-10-01 08:00:00')),
partition p7 value less than (UNIX_TIMESTAMP('2013-11-01 08:00:00'))
)现在有几个问题想讨教一下:
1.我测试下来的结果,如果变换成partition,那么在有数据的情况下,只能将这些数据放到同一个partition里面,不能分开,比如100条数据,是不能分割的,只能放到一个分区下面,然后新的数据再转到新的分区里面。但是像我这么多数据的话,直接一个分区时间很长。因为是测试机,不知道prod环境是否时间缩短。
2.因为是做replication,请教如果master不动,改名slave上的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`)
)
partition by range(clock)(
partition p0 value less than (UNIX_TIMESTAMP('2013-04-01 08:00:00')),
partition p1 value less than (UNIX_TIMESTAMP('2013-05-01 08:00:00')),
partition p2 value less than (UNIX_TIMESTAMP('2013-06-01 08:00:00')),
partition p3 value less than (UNIX_TIMESTAMP('2013-07-01 08:00:00')),
partition p4 value less than (UNIX_TIMESTAMP('2013-08-01 08:00:00')),
partition p5 value less than (UNIX_TIMESTAMP('2013-09-01 08:00:00')),
partition p6 value less than (UNIX_TIMESTAMP('2013-10-01 08:00:00')),
partition p7 value less than (UNIX_TIMESTAMP('2013-11-01 08:00:00'))
)
这样的话,master上的数据能否同步过来?我目前想的2个方法:
1.数据库上新建一个带分区的表,然后把数据导过去,最后改名。
2.就想上面这样的方法,在slave上建相同带分区的表,然后同步。但是想下来,1方法时间太长了,2方法会不会导致数据的丢失。请教是否有更好的方式来解决这样的问题。谢谢。
数据库