我有一个巨大的 InnoDB 表(> 5 亿行),我想通过哈希对其进行分区以减小索引大小。我想以最少的停机时间(例如 10 分钟是可以接受的)来实现这一点,有哪些可能的选择?
我在想如下的事情:
- 创建新的分区表
- 使用“insert ... select ...”将旧表中的所有数据插入到这个新表中
- 使服务器对客户端不可用
- 以某种方式将步骤 2 中发生在旧表上的更改与新表同步
- 用新表替换旧表
- 使服务器可供客户端使用
主要问题是在第 4 步中可以使用什么工具。问题是在第 2 步中可能会对原始表进行大量更改:新的插入、更新、删除 - 同步工具应该将所有这些都考虑在内。 ..
我相信另一种可能的方法是:
- 设置复制从服务器
- 将此从服务器与主服务器同步
- 切换主/从角色并重新配置所有客户端以连接到新的主
- 更改前一个 master 上的 table
- 等待主从同步
- 再次切换主/从角色,重新配置所有客户端
你会推荐哪一个?