很长一段时间以来,我们一直将数据保存在项目的存储库中。我们只是将所有内容都保存在data/sql下,并且每个表都有自己的create_tablename.sql和data_tablename.sql文件。
我们现在刚刚在Scalr上部署了我们的第二个项目,我们已经意识到它有点混乱。
我们部署的方式:
我们有一个“打包”的脚本集合,将项目拆分成3个归档文件(数据、代码、静态文件),然后将其存储在S3上的3个单独的存储桶中。
每当角色启动时,它都会下载其中一个文件(取决于角色: data、nfs或web),然后"unpackage“脚本为每个角色设置所有内容,将数据加载到mysql中,设置nfs等。
我们这样做是因为我们不想保存服务器镜像,我们总是从普通实例开始,我们使用各种内部构建的脚本从头开始在这些实例上安装所有内容。启动时间不是问题(我们有一个9分钟就可以使用的服务器场)。
问题是,每当我们试图建立一个新的开发版本时,试图找到正确的数据库版本是一件痛苦的事情(在任何时候,我们已经为一个项目建立了大约4个开发版本)。此外,一旦我们投入生产,git就开始变得迟钝,因为sql文件最终的总大小约为500mb。
问题是:
其他人是如何管理数据库的?我一直在寻找一种可以轻松地将数据从生产环境中转移到开发环境中,以及将数据从开发环境迁移到生产环境中的方法,但还没有发现任何问题。
发布于 2010-08-22 15:08:00
您应该认真研究一下dbdeploy (dbdeploy.com)。它被移植到许多语言,主要的语言是Java和PHP。它集成在Ant和Phing等构建工具中,并允许轻松共享所谓的增量文件。
增量文件始终包含deploy节,但也可以包含undo节。当您提交增量文件而其他开发人员签出它时,他只需运行dbdeploy,所有新的更改都会自动应用到他的数据库中。
我在我的开放源码博客中使用了dbdeploy,这样您就可以看看增量文件是如何组织的:http://site.svn.dasprids.de/trunk/sql/deltas/
发布于 2010-08-19 10:43:48
我理解你的主要问题是其他人在将SQL数据从开发迁移到生产中的经验。
我使用的是Microsoft SQL Server,而不是我的SQL,所以我不确定您是否可以直接使用我的经验。然而,这种方式工作得非常好。
我使用Visual Studio2010旗舰版来比较两个数据库中的数据。Vinsual Studio Team Edition 2008 (或Database edition)中也存在相同的功能。你可以阅读http://msdn.microsoft.com/en-us/library/dd193261.aspx来理解它是如何工作的。您可以比较两个数据库(dev和prod),并生成用于修改数据的SQL脚本。您可以轻松地从比较中排除一些表或列。您还可以检查结果,并从脚本的生成中排除某些条目。因此,人们可以轻松而灵活地生成脚本,这些脚本可以用于部署数据库中的更改。您可以从结构中分别比较两个数据库的数据(模式比较)。因此,您可以使用prod中的数据刷新dev中的数据,或者生成将prod数据库修改为最新版本的dev数据库的脚本。我建议你看看这个特性和http://www.red-gate.com/的一些产品(比如http://www.red-gate.com/products/SQL_Compare/index.htm)。
发布于 2010-08-11 15:46:46
查看capistrano。它是ruby社区用来部署到不同环境的工具,我发现它真的很有用。
此外,如果您的部署开始受阻,请尝试使用twitter构建的名为Murder的工具。
https://stackoverflow.com/questions/3460085
复制