如何通过从数据库分区到分片来扩展?

说我有一个MySQL表:

CREATE TABLE tweets ( tweet_id INT NOT NULL AUTO_INCREMENT, author_id INT NOT NULL, text CHAR(140) NOT NULL, PRIMARY KEY (tweet_id) ) PARTITION BY HASH(tweet_id) PARTITIONS 12; 

一切都很好。 该表位于单个服务器上 – Server1。 但最终我可能要扩大规模。 所以我想分割表并将12个分区中的6个分区移动到新的服务器 – Server2上。

1)有没有什么快捷方式将这些分区从Server1移动到Server2?

2)现在我有2个服务器,我如何确保2个服务器生成的自动增量tweet_id的值不一样? 我还需要确保每个分区上的tweet_id保持一致,即在分区k上,每个tweet_id的模12等于k。

3)理想情况下,我想继续这个扩大的过程。 所以稍后我想添加第三个服务器 – Server3。 我想重新平衡分区,使每个服务器上有4个分区。 再次如何确保由3个服务器生成的自动增量tweet_id是不同的,并且tweet_id的哈希在每个分区内保持一致?

我不能评论“PARTITION by HASH(tweet_id)PARTITIONS 12;” 部分…但通常的技巧与自动增量当你分区是在应用程序级完成是使用

 auto_increment_increment={numberOfShars} auto_increment_offset={numberOfShars+serverNumber} 

在我的cnf。 所以如果你有4台机器,并把他们的数字从0到3,你的#3机器将有:

 auto_increment_increment=4 auto_increment_offset=7 

这可以保证你的ID在所有碎片中都是唯一的