MySQL 24x7 - InnoDB ALTER TABLE块(表LOCK)

时间:2009-11-16 20:53:39

标签: mysql

我们正在尝试最小化(维护)基于mysql的应用程序的停机时间。

似乎InnoDB hotbackup可以让我们在不停止服务器的情况下进行定期备份;主/从复制将为我们提供故障转移功能(由于复制延迟而导致数据丢失的时间不是很长,但也不是showstopper)。

到目前为止,备份和意外停机时间。现在预计停机时间 -

据我所知,通过阅读在线文档和书籍,InnoDB表上的ALTER TABLE将需要一个TABLE LOCK,从而阻止对该表的所有读写操作。实际上,这将意味着应用程序的停机时间。一些大型表可能需要数小时才能更新。

对此有任何已知的解决方法吗?完美的workaroudn当然是一个非阻塞的ALTER TABLE。但是让ALTER TABLE变得更快的任何事情都很有趣。

提前致谢!

PS - 商业(非免费)工具也可以,免费解决方案当然也欢迎

2 个答案:

答案 0 :(得分:2)

由于你有复制设置,通常可以在从设备上使用ALTER TABLE做一些技巧,让奴隶在完成后进行追赶,交换角色,然后在前主设备上进行ALTER。这不适用于所有ALTER TABLE命令,但它可以处理大多数命令。

here还有一个第三方工具,但我不确定它的使用频率,工作效果等等......

答案 1 :(得分:0)

最好的解决方法是不要改变你的牌桌。

唯一需要更改架构的方法是添加功能,或者以某种方式忘记索引。

如果您要添加功能,无论如何您都可能会停机,以暂存生产服务器。

如果您忘记了索引,那么数据库可能仍然很慢,因此您的用户不应该介意停机以解决性能问题。您应该通过EXPLAIN运行所有查询,以确保已经声明了正确的索引。

如果您害怕经常更改表格,可能需要重新检查您的架构。