您如何管理开发、测试和生产中的数据库?

2024-01-05

我很难找到有关如何在开发、测试和生产服务器之间管理数据库模式和数据的好示例。

这是我们的设置。每个开发人员都有一个运行我们的应用程序和 MySQL 数据库的虚拟机。这是他们的个人沙箱,可以为所欲为。目前,开发人员将对 SQL 架构进行更改,并将数据库转储到他们提交到 SVN 的文本文件中。

我们希望部署一个持续集成开发服务器,该服务器将始终运行最新提交的代码。如果我们现在这样做,它将为每个构建从 SVN 重新加载数据库。

我们有一个运行“候选版本”的测试(虚拟)服务器。目前,部署到测试服务器是一个非常手动的过程,通常需要我从 SVN 加载最新的 SQL 并对其进行调整。另外,测试服务器上的数据不一致。您最终会得到最后一个开发人员在其沙箱服务器上提交的测试数据。

一切都崩溃的地方是生产部署。由于我们无法用测试数据覆盖实时数据,因此这涉及手动重新创建所有架构更改。如果有大量的模式更改或转换脚本来操作数据,这可能会变得非常棘手。

如果问题只是架构,那么问题会更容易,但是数据库中的“基础”数据也会在开发过程中更新,例如安全和权限表中的元数据。

这是我在走向持续集成和一步构建过程中看到的最大障碍。怎么办you解决这个问题?


后续问题:如何跟踪数据库版本,以便知道要运行哪些脚本来升级给定的数据库实例?像兰斯下面提到的版本表是标准程序吗?


感谢您对塔伦蒂诺的提及。我不在.NET环境中,但我找到了他们DataBaseChangeMangement 维基页面 http://code.google.com/p/tarantino/wiki/DatabaseChangeManagement非常有帮助。尤其是这个幻灯片演示 (.ppt) http://tarantino.googlecode.com/svn/docs/Database-Change-Management.ppt

我将编写一个 Python 脚本来检查名称*.sql给定目录中的脚本针对数据库中的表,并根据构成文件名第一部分的整数按顺序运行不存在的脚本。如果这是一个非常简单的解决方案(正如我所怀疑的那样),那么我会将其发布在这里。


我有一个可用的脚本。如果数据库不存在,它会初始化数据库,并根据需要运行升级脚本。还有用于擦除现有数据库和从文件导入测试数据的开关。大约有 200 行,所以我不会发布它(如果有兴趣的话我可能会把它放在 Pastebin 上)。


有几个不错的选择。我不会使用“恢复备份”策略。

  1. 编写所有架构更改的脚本,并让 CI 服务器在数据库上运行这些脚本。使用版本表来跟踪当前数据库版本,并且仅在脚本适用于较新版本时才执行脚本。

  2. 使用迁移解决方案。这些解决方案因语言而异,但对于 .NET,我使用 Migrator.NET。这允许您对数据库进行版本控制并在版本之间上下移动。您的架构是在 C# 代码中指定的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您如何管理开发、测试和生产中的数据库? 的相关文章

  • 不同的数据库使用不同的名称引用吗?

    例如 mysql引用表名使用 SELECT FROM table name 注意 其他数据库是否使用不同的字符来引用其表名 这种引号的使用称为分隔标识符 它是 SQL 的重要组成部分 因为否则您将无法使用以下标识符 例如表名和列名 包含空格
  • 在php中循环多维数组并执行mysql插入(股票数据)

    我有一个多维数组 我希望循环遍历它并为数组中的值执行 mysql 数据库插入 我需要插入到 sql 查询中的数组值是 candles 0 complete candles 0 volume candles 0 mid h candles 0
  • 如何检查 .sql 文件中的 SQL 语法?

    如何检查 sql 文件中的 SQL 语法 SELECT STATEMENT DIGEST TEXT在MySQL 8 0中可以用于MySQL查询语法验证 8 0 4 gt SELECT STATEMENT DIGEST TEXT FLUSH
  • 为 Codeigniter 中的 foreach() 提供的参数无效

    我收到错误消息 我的视图中 foreach 的参数无效 我想显示 mysql 表中的所有条目 但我不断收到错误消息 我是 Codeigniter 的新手 无法真正弄清楚如何解决这个问题 代码如下 我的模型 display branch ph
  • MYSQL:如何从姓氏中找到player_id?

    我现在尝试使用非标准化 摘要 表中的数据填充 testMatch 表 如下 测试匹配表 Field Type Null Key Default Extra match id int 11 NO PRI NULL match date dat
  • InnoDB vs. MyISAM 插入查询时间

    我有一个大型 MySQL 表 约 1000 万行 6 5G 用于读取和写入 它是MyISAM 由于MyISAM 的所有表写入锁 我获得了很多锁 我决定尝试迁移到 InnoDB 推荐用于读 写表 它只锁定写入时的特定行 转换后 我测试了插入语
  • 无法将代码优先迁移应用到 mysql 数据库

    我正在使用 EF 代码优先模型开发 asp net mvc 我正在尝试首先使用 EF 代码将迁移应用到我的项目中 我正在使用 MySql 数据库 目前我使用的是 EF 4 3 1 版本和 6 6 4 0 版本的 mysql Connecto
  • 如何让 SVN ADD 忽略二进制文件

    二进制文件 在 Linux 下 没有扩展名 因此我无法使用模式排除它们 因此当我使用SVN add添加一个目录我会得到类似的东西 svn add recursion vector A recursion vector A recursion
  • Netbeans 和 Svn 中的错误:未找到原始文本

    我正在尝试使用 netbeans 将一些文件提交到我的 svn 存储库 但总是收到此错误 org apache subversion javahl ClientException E155004 There are unfinished w
  • PHP 和 MySQLi 中没有选择数据库错误[重复]

    这个问题在这里已经有答案了 我必须从 MySQL 数据库中选择数据 我一直在寻找答案 但仍然没有找到 我正在学习W3School http www w3schools com php php mysql select asp 我的 MySQ
  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • MySQL 命令输出在命令行客户端中太宽[重复]

    这个问题在这里已经有答案了 我在用mysql终端模拟器中的命令行客户端lxterminal在Ubuntu中 当我运行以下命令时 mysql gt select from routines where routine name simplep
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • 从 .frm 文件恢复 mysql 数据库

    我每周都会倾倒所有桌子以获得备份 但后来我明白它只是存储表的 frm文件 它不显示表的 MYD 和 MYI 文件 所以我只有我的数据库的 frm 文件 而且我的数据库是innodb 那么我可以用数据库中的数据获取我的数据库吗 是的 这是可能
  • 如何将 MySql 表导出/转储到文本文件中,包括字段名称(也称为标题或列名称)

    在 MySql 的解释器中 很容易将表及其字段名称转储到屏幕上 似乎没有简单的方法可以将表导出到制表符分隔或 CSV 输出文件包括它的列标题 我尝试仅使用 SQL 或 Linux 命令行来完成此操作 而不用其他语言编写程序 谢谢 将查询通过
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • MySQL 中如何使用继承?

    所以我正在读一本关于数据库设计原理的书 并读到了有关继承的章节 但我对如何在 MySQL 中将子类与其超类 连接 感到困惑 The table structure would for example look like this 那么我如何
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml

随机推荐

  • 我应该排除 .gitignore 中的 Aurelia 脚本文件夹吗?

    我是否应该将 Aurelia 项目的 scripts 文件夹放入 gitignore 中 因为据我所知 它们无论如何都会在每次运行时重建 我的 gitignore 当前包含 node modules jspm packages idea D
  • Soundcloud 重定向 Https -> Http

    我有一个使用 SoundCloud js sdk 来传输音频的页面 初始化看起来像这样 SC initialize client id myId redirect uri https window location host soundcl
  • MVC3 网站内的作业调度程序

    我正在寻找一些指导 以获取在我的 MVC3 网站内部使用的作业计划程序设置 我一直在寻找 Quartz NET 来解决这个问题 但在网上找不到有关设置的指导 以确保它在网站运行时运行 考虑到上述信息 我知道在 IIS 中设置作业调度程序有几
  • 如何在 Google 计算引擎实例上安装自定义内核?

    我想在 Google Compute Engine 实例上安装自定义内核映像 我有一个运行的实例 foo instance 1 boot efi uname a Linux instance 1 4 10 0 22 generic 24 U
  • Activity.finish() 方法到底在做什么?

    我正在开发 Android 应用程序一段时间 并关注了很多有关 Activity 生命周期和应用程序生命周期的帖子 I know Activity finish 方法在某处调用Activity onDestroy 并且还从堆栈中删除活动 我
  • 为什么 inet_ntoa 和 inet_ntop “反转”字节?

    这是一个相当基本的问题 令我惊讶的是 我今天遇到了问题 在我看来 inet pton 和 inet ntoa 正在反转给定的 IP 地址的字节 DWORD IP inet pton AF INET 192 168 0 1 IP printf
  • 我可以在没有扩展名的 zip 文件上使用 PowerShell `Expand-Archive`

    我正在编写一个 PowerShell 脚本 我必须从其中提取内容 zip存档的扩展名已被删除 因此 存档的名称可以说不是test zip只是test 并且它被压缩为 zip档案 我正在尝试为此目的使用 PowerShell cmdletEx
  • 改变 redux 状态深处的值

    context 我正在渲染一个带有一组动态文本元素的表单 我已经使用标准化了我的状态规范化原则 https github com paularmstrong normalizr因此有一个 elementIds 数组和一个包含 element
  • Python,Try、Except语句在X秒后超时?

    我一直在搜索这个问题 但似乎找不到确切的答案 大多数人都会陷入更复杂的事情 如多线程等 我只想做一些类似 Try except 语句的事情 如果过程没有完成在 X 秒内它将抛出异常 编辑 原因是我正在使用网站测试软件 selenium 其配
  • ASP.NET 日志记录 - 最佳实践 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Symfony 4,主义,getResult和getArrayResult和getScalarResult返回相同的结构结果

    从 symfony 4 开始 我创建了一个示例存储库类 在这个课程中 我创建了一个方法来获取所有电子邮件用户的列表 我想要一个像这样的数组结构 array email1 email2 email3 但通过 getResult 我得到了一个多
  • 如何在 TypeScript 中将类型重新导出为全局类型

    我希望有一个可全局访问的接口 在单独的文件中定义 我该怎么做 这是我的globals d ts file import Theme Style from style themes theme types declare global The
  • 我如何判断我的上下文是否仍然有效?

    我现在正在处理一个相当常见的情况 通过网络下载一些数据 然后更新视图以显示它 显然 我想在后台进行 Web 下载 然后更新主 UI 线程上的视图 现在看看我的代码 我有点担心我的 Activity 及其 UI 元素在更新之前被杀死 这是我的
  • 相对日期格式,输出过去的日期?

    我正在考虑使用 NSDateFormatter setDoesRelativeDateFormatting 将日期表示为 今天 或 昨天 我只查看过去的日期 但很好奇我会看到哪些针对英国本地化的选项 Just Today 昨天 或者任何更复
  • Android 蓝牙InputStream实时读取

    我正在开发一个 Android 应用程序 它通过蓝牙接收实时数据并将其绘制在屏幕上 该数据是陀螺仪传感器位置信息 我从定制的 Freescale Kinetis K10 微控制器板 由我自己设计和测试 发送它 对于蓝牙通信 我使用 HC 0
  • 如何在 ASP.NET MVC 中创建 CheckBoxListFor 扩展方法?

    我知道有一个ListBoxForASP NET MVC Html 辅助扩展方法中的扩展方法 但我一直认为复选框列表比列表框更用户友好 有一个非常方便的CheckBoxList旧式 WebForm 中的控制 但显然现在已经不可行了 问题是 为
  • AWS API Gateway - Elastic Beanstalk - 访问受限

    我在 Amazon EB 上有一个 NodeJS API 在 API Gateway 上有一个 API API Gateway 配置为 EB 的代理 我可以毫无问题地调用我的 API 它正在工作 但我不知道如何管理安全性 实际上 如果我使用
  • 在Python中任意时间捕获用户输入

    当用户在控制台中输入内容时 有没有办法向 python 模块发送中断 例如 如果我正在运行无限 while 循环 我可以用 try except for KeyboardInterrupt 包围它 然后在 except 块中执行我需要执行的
  • IIS Express Visual Studio 集成 - 更改站点名称

    我刚刚开始将 Visual Studio 2010 SP1 与 IIS Express 一起使用 当 Visual Studio 启动 IIS Express 时 它会指定用于启动 IIS Express 的 站点 的名称 该网站的名称似乎
  • 您如何管理开发、测试和生产中的数据库?

    我很难找到有关如何在开发 测试和生产服务器之间管理数据库模式和数据的好示例 这是我们的设置 每个开发人员都有一个运行我们的应用程序和 MySQL 数据库的虚拟机 这是他们的个人沙箱 可以为所欲为 目前 开发人员将对 SQL 架构进行更改 并