我有一个巨大的 InnoDB 表(>1TB,>1B 行),我想分片:我想从那个大表中创建多个较小的独立表。
怎么做 ?
我已经尝试过的:
- 通过从原始表中选择行并将它们插入分区来将行移动到分区。这需要很长时间,并且在操作期间保持行同步是很困难的(但似乎可以使用触发器,只要分区在同一台服务器上)。我还没有找到一个现成的工具来做到这一点。
- 复制整个表,然后删除不属于分区的行。仍然很慢,尤其是考虑到桌子的大小。显然,这就是 MySQL Fabric 所做的。
随机的疯狂想法:
- 离线拆分
.idb
文件,并将其导入服务器,但我不知道是否存在能够执行此操作的工具。
显示创建表:
CREATE TABLE `Huge` (
`account_id` int(11) NOT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`foo` varchar(255) NOT NULL,
`bar` int(11) NOT NULL,
`baz` char(2) NOT NULL,
PRIMARY KEY (`account_id`,`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
分片键是 account_id。当前的主键是(account_id,id)
使行由account_id
.
是否有任何工具可以自动执行此任务?有没有更好的方法来做到这一点?