改变大桌子没有停机时间

时间:2017-08-01 11:08:12

标签: mysql alter percona

我有一个非常大的表,让我们调用它的例子,然后我尝试在该表上执行一个小的alter命令:

ALTER TABLE `example` ADD `example_column` TINYINT(1) NOT NULL DEFAULT 0;

检查alter命令的进度:

mysql -e 'show engine innodb status \G' | grep 'undo \| log \| entries'

给我很好的信息,关于时间 - 或多或少需要17天才能完成......

更改阻止表,因此阻止生产表17天不是一个好选择。 ;)

我尝试在网上调查一些很棒的工具,例如:

  1. Pt-online-schema-change - Percona
  2. gh-ost - GitHub的MySQL在线架构迁移
  3. 我还阅读了上述工具的文档和限制部分:

    gh-ost limitations

    • 根本不支持触发器
    • 根本不支持外键

    pt-online-schema-change limitations

    • 使用触发器意味着如果已经在表上定义了任何触发器,该工具将无法工作。
    • 不提供更改包含外键的表的任何好方法

    我的示例表有触发器和外键......

    你能给我一些建议吗,如何应对这种变化?

    我有MySQL 5.6。我使用GTID(基于行)复制。

    我将非常感谢您的建议!

1 个答案:

答案 0 :(得分:0)

1.创建新表

2.将现有表格行复制到这个新表中。

3.删除旧表

4.重命名新表名。

5.虽然将行从旧表复制到新表,但您确实在新表和旧表中插入了传入的写请求,因此您将在新表中包含完整的行。