如何零停机对MySQL 100GB表进行分区?

Raj*_*aja 5 mysql partitioning

我有一个100GB的Innodb引擎表,我计划对表进行分区。谁能告诉我如何在零停机时间内做到这一点?

在100GB的表中,记录每秒都在增加。如何在不影响传入记录的情况下进行分区?

使用 Percona-Mysql 5.5.30.Innodb-file-per-table 已启用。

请告诉我步骤。

Shl*_*ach 4

您可以使用 online-alter-table 工具之一:这些是专门的脚本ALTER TABLE,使用TRIGGERs 和影子表来模拟操作,并且允许非中断过程。因此,即使您正在修改(插入、删除、更新)表,同步两者,它们也会将您的表以小块的形式复制到影子表中。

它们以非常短暂(最多几秒钟,通常是亚秒)的锁定结束,原始表被丢弃,“影子”表开始取代它。

两个这样的工具是:

  1. Oak-online-alter-table,作为 openark-kit 的一部分(披露:我是这个工具的作者)。自 2009 年以来一直存在,并且是同类中的第一个。
  2. pt-online-schema-change,作为 percona 工具包的一部分;到达时间较晚,但更复杂且经过更多测试。