10

很长一段时间以来,我们一直将数据保存在项目的存储库中。我们只是将所有内容保存在 data/sql 下,每个表都有自己的 create_tablename.sql 和 data_tablename.sql 文件。

我们现在刚刚将我们的第二个项目部署到 Scalr 上,我们已经意识到它有点混乱。

我们的部署方式:

我们有一个“打包”脚本集合,将项目拆分为 3 个存档(数据、代码、静态文件),然后我们将它们存储在 S3 上的 3 个单独的存储桶中。

每当一个角色启动时,它会下载一个文件(取决于角色:数据、nfs 或 web),然后“解包”脚本为每个角色设置所有内容,将数据加载到 mysql,设置 nfs 等.

我们这样做是因为我们不想保存服务器图像,我们总是从 vanilla 实例开始,我们使用各种内部构建的脚本从头开始安装所有东西。启动时间不是问题(我们在 9 分钟内就可以使用农场)。

问题是,每当我们尝试设置新的开发构建时,尝试找到正确的数据库版本是一件很痛苦的事情(在任何时候,我们都有大约 4 个项目的开发构建)。此外,一旦我们投入生产,git 就会开始窒息,因为 sql 文件最终总计大约 500mb。

问题是:

其他人如何管理数据库?我一直在寻找可以轻松地将数据从生产环境中转移到开发环境中的方法,以及将数据从开发环境迁移到生产环境中的方法,但没有发现任何问题。

4

5 回答 5

4

您应该认真查看 dbdeploy (dbdeploy.com)。它被移植到许多语言,主要是 Java 和 PHP。它集成在 Ant 和 Phing 等构建工具中,并允许轻松共享所谓的 delta 文件。

一个增量文件总是包含一个部署部分,但也可以包含一个撤消部分。当您提交您的增量文件并且另一个开发人员检查它时,他只需运行 dbdeploy 并且所有新更改都会自动应用于他的数据库。

我将 dbdeploy 用于我的开源博客,因此您可以查看 delta 文件的组织方式:http ://site.svn.dasprids.de/trunk/sql/deltas/

于 2010-08-22T15:08:00.007 回答
2

我如何理解您的主要问题是其他人将 SQL 数据从开发迁移到生产的经验。

我使用 Microsoft SQL Server 而不是 My SQL,所以我不确定我的经验是否可以直接使用。不过这种方式效果很好。

我使用 Visual Studio 2010 Ultimate 版本来比较两个数据库中的数据。Vinsual Studio Team Edition 2008(或数据库版)中也存在相同的功能。您可以阅读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-19T10:43:47.787 回答
0

看看capistrano。这是 ruby​​ 社区用于部署到不同环境的工具,我发现它非常有用。

此外,如果您的部署开始受阻,请尝试使用 twitter 构建的名为Murder的工具。

于 2010-08-11T15:46:45.870 回答
0

我个人会看蟾蜍

http://www.toadworld.com/

少于 10k ;) ... 将分析数据库结构,生成脚本来修改它们,还将迁移数据。

于 2010-08-22T15:12:43.870 回答
0

解决方案的一部分是在单个位置捕获每个代码模块的版本及其对应的数据资源,并进行比较以确保一致性。例如,您的customer_comments模块版本号的增加将需要相应的 SQL 增量文件来将相关的数据库表升级到数据的相同版本号。

例如,查看@AlanStorm 记录的Magentocore_resource 方法。

干杯,JD

于 2010-08-23T05:28:39.937 回答