阿尔特大表无需停机

问题描述:

我有一个非常大的表,让我们把它叫做例子,我尝试在该表上执行一个小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. 铂在线模式变化 - Percona的
  2. GH-OST - GitHub的网络架构迁移的MySQL

我也看到了有关文件,以及上述工具中,限制部分:

gh-ost limitations

  • 完全不
  • 支持触发器在所有

pt-online-schema-change limitations

  • 使用触发器意味着,如果任何触发器已经该工具将无法工作不支持外键在桌子上定义。
  • 不提供改变包含外键

我的示例表具有触发器和外键的表什么好办法......

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

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

我将非常感谢您的建议!

+0

这张桌子有多大? –

+0

我想这将是更好地使用一个完全新的表为你的新列,这将是当前表的扩展表。 –

1.创建新表格

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

3.删除旧表

4.Rename新的表名。

5.将旧表中的行复制到新表中时,确实会在新表和旧表中插入传入写入请求,以便在新表中包含完整行。