我们正在尝试最小化(维护)基于mysql的应用程序的停机时间。
似乎InnoDB hotbackup可以让我们在不停止服务器的情况下进行定期备份;主/从复制将为我们提供故障转移功能(由于复制延迟而导致数据丢失的时间不是很长,但也不是showstopper)。
到目前为止,备份和意外停机时间。现在预计停机时间 -
据我所知,通过阅读在线文档和书籍,InnoDB表上的ALTER TABLE将需要一个TABLE LOCK,从而阻止对该表的所有读写操作。实际上,这将意味着应用程序的停机时间。一些大型表可能需要数小时才能更新。
对此有任何已知的解决方法吗?完美的workaroudn当然是一个非阻塞的ALTER TABLE。但是让ALTER TABLE变得更快的任何事情都很有趣。
提前致谢!
PS - 商业(非免费)工具也可以,免费解决方案当然也欢迎
答案 0 :(得分:2)
由于你有复制设置,通常可以在从设备上使用ALTER TABLE做一些技巧,让奴隶在完成后进行追赶,交换角色,然后在前主设备上进行ALTER。这不适用于所有ALTER TABLE命令,但它可以处理大多数命令。
here还有一个第三方工具,但我不确定它的使用频率,工作效果等等......
答案 1 :(得分:0)
最好的解决方法是不要改变你的牌桌。
唯一需要更改架构的方法是添加功能,或者以某种方式忘记索引。
如果您要添加功能,无论如何您都可能会停机,以暂存生产服务器。
如果您忘记了索引,那么数据库可能仍然很慢,因此您的用户不应该介意停机以解决性能问题。您应该通过EXPLAIN运行所有查询,以确保已经声明了正确的索引。
如果您害怕经常更改表格,可能需要重新检查您的架构。