我想知道如何/如果人们解决了数据库模式更改,否则会导致生产系统崩溃。似乎在某种程度上受限制的附加变化(例如,唯一约束)很难做到b / c应用程序和数据库必须同时更改,否则将在数据或应用程序中发生错误。
我已经考虑过切换到从属数据库(使用mysql复制)并在主服务器上运行模式更改但是你需要以某种方式捕获应用于从服务器的更新查询,而不应用于主服务器和你会冒不用备份服务器的风险。
人们习惯使用哪些技巧解决这些问题?
谢谢, 和Manish
答案 0 :(得分:4)
我会说你接近这个想法;实际上,我有一个主人和一个奴隶,主人是活着的,奴隶的变化复制到它;暂停从属服务器上的复制,然后在从服务器上执行模式更改,并在完成模式更改后,取消复制;一旦整个过程完成,请暂停主站很短的时间,以确保在从站上刷新复制的更改,然后切换主站和从站。这应该做你需要的。
请注意,这仅适用于挂起的复制命令未触及您对架构所做的更改;这通常最好在低流量时间完成,以确保不太可能发生碰撞。请注意,因为在从服务器完全更新模式并复制更改之前,这不会对主服务器进行任何更改,因此对主服务器来说非常安全。
答案 1 :(得分:2)
这取决于您如何更改架构,之前我们会尝试确保实现的架构更改与之前版本的应用程序向后兼容。这适用于次要(和相当重要)的项目。它还意味着如果我们对应用程序有严重的性能问题(使思想消失),那么回滚代码是一项简单而非艰巨的任务。
答案 2 :(得分:0)
唯一真正的方法是拥有一个群集数据库,或者你建议的主/从。通常,您将一个节点脱机并执行升级。完成此操作后,通常会从当前主服务器运行同步到新升级的系统,该系统了解如何将数据从旧模式转换为新模式。 (在同步期间,主设备可能会暂时进入只读模式。)
然后切换主/从角色并升级其他数据库架构。将它们重新同步,并将升级的从站重新联机。
在实践中,这可能很难做到,特别是如果您有重大的架构更改。