说我有一个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在所有碎片中都是唯一的