假设我有一个 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 上。
我想要:
- Server1 包含奇数推文:分区 1、3、5、7、9、11
- Server2 包含偶数推文:分区 2、4、6、8、10、0
1) 将这些分区从 Server1 移动到 Server2 的最佳方法是什么?我需要确保自动增量 tweet_id 的值在迁移过程中保持不变。
2)现在我有两台服务器,如何确保两台服务器生成的自动增量 tweet_id 的值不同?我还需要确保每个分区上的 tweet_id 保持一致,即在分区 k 上,每个 tweet_id 的模 12 等于 k。
3)理想情况下,我想继续这个向外扩展的过程。所以稍后我想添加第三台服务器 - Server3。我想重新平衡分区,以便每台服务器上有 4 个分区。同样,如何确保 3 个服务器生成的自动增量 tweet_id 是不同的,并且 tweet_id 的模 12 在每个分区内保持一致?