我很难找到如何在开发,测试和生产服务器之间管理数据库模式和数据的好例子.
这是我们的设置.每个开发人员都有一个运行我们的app和MySQL数据库的虚拟机.他们的个人沙箱可以随心所欲.目前,开发人员将对SQL模式进行更改,并将数据库转储到他们提交到SVN的文本文件中.
我们希望部署一个始终运行最新提交代码的持续集成开发服务器.如果我们现在这样做,它将从SVN为每个构建重新加载数据库.
我们有一个运行"候选版本"的测试(虚拟)服务器.部署到测试服务器目前是一个非常手动的过程,通常涉及我从SVN加载最新的SQL并进行调整.此外,测试服务器上的数据不一致.您最终得到了最后一个开发人员在沙盒服务器上提供的测试数据.
一切都崩溃的是部署到生产.由于我们无法使用测试数据覆盖实时数据,因此需要手动重新创建所有架构更改.如果有大量的架构更改或转换脚本来操纵数据,这可能会变得非常毛茸茸.
如果问题只是模式,那将是一个更容易解决的问题,但数据库中存在"基础"数据,在开发过程中也会更新,例如安全性和权限表中的元数据.
这是我在实现持续集成和一步构建方面遇到的最大障碍.如何你解决呢?
后续问题:如何跟踪数据库版本,以便了解要运行哪些脚本来升级给定的数据库实例?Lance的版本表是否低于标准程序?
感谢您参考塔伦蒂诺.我不是在.NET环境中,但我发现他们的DataBaseChangeMangement维基页面非常有用.特别是这个Powerpoint演示文稿(.ppt)
我将编写一个Python脚本,它*.sql根据数据库中的表检查给定目录中脚本的名称,并根据构成文件名第一部分的整数按顺序运行那些脚本.如果这是一个非常简单的解决方案,我怀疑它会是,那么我会在这里发布.
我有一个工作脚本.如果数据库不存在,它会处理初始化数据库并根据需要运行升级脚本.还有用于擦除现有数据库和从文件导入测试数据的开关.这是大约200行,所以我不会发布它(虽然如果有兴趣我可能会把它放在pastebin上).
Lan*_*her 52
有几个不错的选择.我不会使用"恢复备份"策略.
编写所有架构更改脚本,让CI服务器在数据库上运行这些脚本.有一个版本表来跟踪当前数据库版本,并且只有在更新版本时才执行脚本.
使用迁移解决方案.这些解决方案因语言而异,但对于.NET,我使用的是Migrator.NET.这允许您对数据库进行版本控制,并在不同版本之间上下移动.您的架构在C#代码中指定.
tbr*_*fni 28
您的开发人员需要为他们处理的每个错误/功能编写更改脚本(架构和数据更改),而不仅仅是将整个数据库转储到源代码控制中.这些脚本将当前生产数据库升级到开发中的新版本.
您的构建过程可以将生产数据库的副本还原到适当的环境中,并从源代码控制上运行所有脚本,这将使数据库更新为当前版本.我们每天都这样做,以确保所有脚本都正确运行.
Juh*_*älä 13
看看Ruby on Rails是如何做到这一点的.
首先是所谓的迁移文件,它基本上将数据库模式和数据从版本N转换为版本N + 1(或者在从版本N + 1降级到N的情况下).数据库有表告诉当前版本.
在单元测试之前,测试数据库总是被擦除干净,并且用文件中的固定数据填充.
Esk*_*ola 10
" 重构数据库:进化数据库设计 "一书可能会为您提供有关如何管理数据库的一些想法.http://martinfowler.com/articles/evodb.html上也提供了简短版本
在一个PHP + MySQL项目中,我已将数据库修订号存储在数据库中,当程序连接到数据库时,它将首先检查修订.如果程序需要不同的修订版,它将打开一个用于升级数据库的页面.每个升级都在PHP代码中指定,这将更改数据库架构并迁移所有现有数据.
dev_<<db>> , tst_<<db>> , stg_<<db>> , prd_<<db>>(显然,您永远不应该对数据库名称进行硬编码| 归档时间: |
|
| 查看次数: |
30913 次 |
| 最近记录: |