我有一个脚本是部署过程的一部分,用于将数据库更改推送到生产服务器。如果脚本由于某种原因(更新错误)破坏了我的数据,则很难恢复。
解决此问题的一种方法是在更新时关闭应用程序,因此如果出现问题,只需返回我在部署之前所做的备份。
但是我听说有其他人部署并保持他们的网站正常运行......你将如何做到这一点,如果你失败了,你怎么能恢复自部署之前你的备份以来的数据?< / p>
答案 0 :(得分:1)
这通常是一个棘手的问题,就像数据库管理中的许多事情一样。基本上有三种方法可以解决这个问题:
如果您有复杂的系统,请根据这些或类似的类别隔离您的组件。
有一个临时系统来测试升级。登台系统或多或少是生产系统的副本;它与测试系统分开。另一件事是拥有一个审计或日志记录系统,如果需要重放数据,可以参考该系统。
真正的问题是,如果您稍后注意到您的升级有问题。那你就搞砸了。
答案 1 :(得分:0)
您的数据库有多大?您是否可以丢失在客户使用它时以及必须进入备份之前更新的数据?每个部署计划都涉及某些方面的妥协,你必须决定哪些妥协对你想做的事情最不痛苦。
对于仅运行pgsql的简单网站,您可以断开客户端,并在一个大事务中运行整个更新。如果任何部分失败,整个事情就会回滚,就像你从未做过任何事情一样。遗憾的是,这对于其他dbs并不完全相同,但是使用闪回或任何oracle调用它可以得到类似的东西。
对于在复制的数据库服务器集上运行的更大,更复杂的网站,事情变得更加复杂得多。在我工作的地方,我们使用过Slony,在部署DDL更改时与其他人一起玩很不好,而且在部署DDL时,你几乎必须让所有客户脱机。但是,即使数据库的大小接近1TB,我们也会以分钟为单位测量停机时间。