我很难找到如何在开发,测试和生产服务器之间管理数据库模式和数据的好例子。如何在开发,测试和生产中管理数据库?
这是我们的设置。每个开发人员都有一台运行我们的应用和MySQL数据库的虚拟机。做他们想做的事是他们个人的沙箱。目前,开发人员将对SQL模式进行更改,并将数据库转储到他们提交到SVN的文本文件中。
我们希望部署持续集成开发服务器,该服务器始终运行最新的提交代码。如果我们现在这样做,它会为每个构建从SVN重新加载数据库。
我们有一个运行“发布候选”的测试(虚拟)服务器。部署到测试服务器目前是一个非常手动的过程,通常需要从SVN加载最新的SQL并对其进行调整。另外,测试服务器上的数据不一致。您最终得到最后一名开发人员在其沙箱服务器上提供的任何测试数据。
凡是发生故障的部分都是生产部署。由于我们无法用测试数据覆盖实时数据,因此需要手动重新创建所有模式更改。如果有大量的模式更改或转换脚本来操纵数据,这可能会变得非常多毛。
如果问题只是模式,它会是一个更容易的问题,但是在开发过程中还会更新数据库中的“基础”数据,例如安全和权限表中的元数据。
这是我在迈向持续集成和一步构建时遇到的最大障碍。 你解决了吗?
后续问题:如何跟踪数据库版本,以便知道要运行哪些脚本以升级给定的数据库实例?像兰斯这样的版本表是否在标准程序下方提到?
感谢您参考塔伦蒂诺。我不在.NET环境中,但我发现它们的DataBaseChangeMangement wiki page非常有帮助。特别是这Powerpoint Presentation (.ppt)
我打算编写一个Python脚本,检查给定目录中*.sql
脚本的名称与数据库中的表的名称,并根据表单形式运行那些不存在的名称文件名的第一部分。如果这是一个非常简单的解决方案,正如我怀疑的那样,那么我会在这里发布它。
我有一个工作脚本。它处理初始化数据库,如果它不存在并根据需要运行升级脚本。还有用于擦除现有数据库并从文件导入测试数据的开关。它大约有200行,所以我不会发布它(尽管如果有兴趣,我可能会把它放在pastebin上)。
相关:HTTP:// stackoverflow.com/questions/52583/best-tool-for-synchronizing-mysql-databases – 2012-08-21 09:31:36