我有一个超过1TB,10亿行的巨大InnoDB表格,我想对其进行分片:我希望从这个大表中创建多个较小的独立表格。
如何实现?
我已经尝试过:
- 通过从原始表格中选择行并将它们插入到分区中来将行移动到分区。这需要很长时间,并且在操作期间保持行同步很困难(但似乎可以通过触发器完成,只要分区在同一服务器上)。我没有找到一个现成的工具来做这件事。
- 复制整个表格,然后删除不属于分区的行。仍然非常缓慢,特别是考虑到表格的大小。这似乎是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;
分片键将是账户ID。当前的主键是(account_id,id)
,使得行按account_id
聚集。
有没有自动化此任务的工具?有没有更好的方法来完成这项任务?