阿尔特大表无需停机
问题描述:
我有一个非常大的表,让我们把它叫做例子,我尝试在该表上执行一个小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天是不是一个好的选择。 ;)
我尝试以调查在网络上一些伟大的工具,如:
- 铂在线模式变化 - Percona的
- GH-OST - GitHub的网络架构迁移的MySQL
我也看到了有关文件,以及上述工具中,限制部分:
- 完全不
- 支持触发器在所有
pt-online-schema-change limitations
- 使用触发器意味着,如果任何触发器已经该工具将无法工作不支持外键在桌子上定义。
- 不提供改变包含外键
我的示例表具有触发器和外键的表什么好办法......
你能不能给我一些建议,如何应对这种改变?
我有MySQL 5.6。我使用GTID(基于行)复制。
我将非常感谢您的建议!
答
1.创建新表格
2.将现有表格行复制到此新表格中。
3.删除旧表
4.Rename新的表名。
5.将旧表中的行复制到新表中时,确实会在新表和旧表中插入传入写入请求,以便在新表中包含完整行。
这张桌子有多大? –
我想这将是更好地使用一个完全新的表为你的新列,这将是当前表的扩展表。 –