部署开发数据库到现场系统的最佳实践是什么?

我在一个项目中的开发人员希望在开发服务器上的开发数据库与实时服务器上的实时数据库同步,我认为这是一个坏主意。 尽pipe如此,部署代码库+ db的最好方法是什么? 到目前为止,我使用rsync的数据和简单的数据库导出/导入。 最终的设置包括一个dev服务器和2个Live服务器(一个在美国,一个在欧洲,HA / LB)。 提出了MariaDB集群,但我不确定是否要在此设置中引入多主复制。 特别是因为2 Live服务器是由距离分开的。 此外,我必须设法为他们提供一个up2date的活动数据库为dev服务器,因为发展显然不能推动数据库旧的时间(那么将有缺less的时间之间的input/input项)。 也许我没有在这里看到森林里的树,而且很简单。 你们build议我应该怎么做?

自从这个开始变成了一个交换意见,我想我会正确地写出来。

首先,(经常)将prod数据库同步到dev中是一个相当常见的要求,所以开发工作正在接近现实。 但是相反呢? 我不知道我曾经见过,我绝对不会这样做。

您应该注意,通常情况下,模式或数据库内容更改需要对prod数据库进行更新,以与正在从开发中滚动的代码更改一致。 但是一个理智的发布stream程可以通过开发更新架构,上传新内容和/或修改现有内容的过程来处理这些问题,并在代码发布时部署这些过程。

在我工作过的最好pipe理的环境中,这些变化实际上是脚本化的 – 一个开发人员制作了一个冗长的变更 – testing – 响应文档,在痛苦的细节中说什么是必须input的,将会看到什么,应该如何testing,并且需要什么结果。 该脚本由第二个开发人员签名,以确认它已经在干净的testing环境中进行了testing,并由第三个开发人员执行,该开发人员没有从事该过程。 这可以确保没有人试图变得聪明,当发生奇怪的事情时,就会走出去。 通常情况下, 第四个开发者会共同签署脚本,说他已经确认了所有被宣称可以看到和完成的事情。

该脚本还指定了一个经过testing的退出过程,如果在任何时候响应与脚本所期望的不匹配,则由第三方开发人员执行。 如果整个过程通过,产品环境通常会重新进入开发和testing环境。

我并不是说整个过程都适合你的环境, 只是这是为了一些人。 但你似乎想知道如何处理模式和内容的变化,而不是盲目地同步dev进入prod,所以我希望能够对此有所了解。 如果您最终通过将dev同步到prod进行部署,请确保您的备份是最新的,并且您的恢复过程经过充分testing。 你将需要他们。