Mysql 如何合理地跟踪SVN对数据库结构的修改?

Mysql 如何合理地跟踪SVN对数据库结构的修改?,mysql,database,svn,postgresql,versioning,Mysql,Database,Svn,Postgresql,Versioning,主要问题是数据库结构的版本控制。 标准的mysqldump和pg_dump实用程序不能生成非常适合版本控制的文件 dump命令生成具有自动增量值、TOC条目等的转储文件。由于这些对象会不断发生变化,因此总是会产生巨大的差异 PostgreSQL Diff -- --- TOC entry 2630 (class 0 OID 0) +-- TOC entry 2549 (class 0 OID 0) -- Dependencies: 6 -- Name: SCHEMA adm; Type:

主要问题是数据库结构的版本控制。

标准的mysqldump和pg_dump实用程序不能生成非常适合版本控制的文件

dump命令生成具有自动增量值、TOC条目等的转储文件。由于这些对象会不断发生变化,因此总是会产生巨大的差异

PostgreSQL Diff

 --
--- TOC entry 2630 (class 0 OID 0)
+-- TOC entry 2549 (class 0 OID 0)
 -- Dependencies: 6
 -- Name: SCHEMA adm; Type: COMMENT; Schema: -; Owner: admin
@@ -61,5 +61,5 @@
--- Dump completed on 2010-07-20 14:33:44
+-- Dump completed on 2010-08-11  8:59:39
Index: /db.sql
===================================================================
--- /db.sql (revision 1274)
+++ /db.sql (revision 1317)
@@ -36,5 +36,5 @@
   `message` text,
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=21122 DEFAULT CHARSET=utf8;
+) ENGINE=MyISAM AUTO_INCREMENT=23730 DEFAULT CHARSET=utf8;
MySQL差异

 --
--- TOC entry 2630 (class 0 OID 0)
+-- TOC entry 2549 (class 0 OID 0)
 -- Dependencies: 6
 -- Name: SCHEMA adm; Type: COMMENT; Schema: -; Owner: admin
@@ -61,5 +61,5 @@
--- Dump completed on 2010-07-20 14:33:44
+-- Dump completed on 2010-08-11  8:59:39
Index: /db.sql
===================================================================
--- /db.sql (revision 1274)
+++ /db.sql (revision 1317)
@@ -36,5 +36,5 @@
   `message` text,
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=21122 DEFAULT CHARSET=utf8;
+) ENGINE=MyISAM AUTO_INCREMENT=23730 DEFAULT CHARSET=utf8;
如果您对更好的版本控制方式有任何建议/链接/实用程序,我们将不胜感激

谢谢。

看看LiquiBase()

它是一个允许开发人员将数据库更改提交到SVN的工具,然后将它们安全自动地应用到数据库

更改可以通过比较两个数据库进行反向工程,也可以由开发人员手工编码并提交


它还确保数据库更改以正确的顺序应用,并且只对给定的数据库应用一次。

我们只需对用于从头创建数据库的脚本进行版本设置。开发人员在文本文件中编辑脚本,而不是在数据库中。开发人员无权访问生产SQL服务器,DBA团队使用专门设计的工具来比较数据库模式(在我们的例子中是RedGateSqlCompare),以便进行生产构建。他们将从脚本创建一个新的空数据库,并使用比较工具检测更改。有些更改可以自动应用,有些必须手动更改


这不是一个完美的系统,但到目前为止,它对我们来说运行得相当好。

我不会使用MySQL转储,因为它们主要用于数据备份,而您通常不使用版本控制来管理数据备份。相反,我只需要对安装脚本或用于设置初始数据库结构的SQL文件进行版本控制

对于小型项目,我通常只有一个名为
install.sql
的文件,其中包含我所有的
CREATE
语句和描述模式的
schema.txt
。对于更大的项目,您可能希望使用类似dbForge的东西,它允许在专业版中进行数据库模式版本控制,但如果这就是您使用它的全部目的的话,它会有点昂贵

查看“编写恐怖代码”(尤其是文章中的第一个链接)以获取更多指导。

最近在“”上写了一篇博客文章

我想说:

  • 如果您只是将每个对象的模式存储在SVN中,那么您仍然需要部署具有顺序依赖关系和数据修改的更改,因此真正让您受益的是对所涉及对象的更改历史进行分类
  • 编写脚本以执行所有更改,包括撤消更改的脚本
  • 用于生成(PostgreSQL)数据库架构差异
您可以使用免费的PostgreSQL数据库来比较您的开发模式和生产模式。您只需以最适合的方式更新开发数据库。当您想将生产数据库更新为开发数据库的状态时,您需要转储开发数据库模式和生产数据库模式,并让apgdiff对它们进行比较。它将生成包含将生产数据库转换为开发状态数据库所需的DDL语句的输出

实际上,如何将apgdiff部署到开发周期取决于您,它所做的只是使用DDL语句创建输出,以“移动”生产数据库到与开发数据库相同的状态


在网站上,你可以找到关于它如何工作、如何使用、支持哪些语句等的信息。在我的博客www.fordfrog.name上也有关于PostgreSQL模式升级的文章(我只允许包含一个链接,因此无法创建此地址链接)。

这是我们在许多项目上使用的相同方法,它对我们很有效,一些开发人员抱怨必须编写sql才能创建表,这可能是个例外。我通常告诉他们无论如何都不应该依赖设计师(即使他们确实节省了一些时间)。我同意。如果开发人员要使用数据库,他们应该能够从头开始编写表创建脚本,而不必训练太多的脑细胞。如果他们不能,也许他们应该把数据库工作留给更有资格的人。话虽如此,我对任何人使用任何他们喜欢的工具来组合脚本没有任何问题,但最终,它要么被检查到subversion,要么没有被部署。绝对同意你们的观点,即使我们有时仍然依赖IDE。谢谢你的建议!很好的提示。我一直在寻找数据库版本控制的开源解决方案。谢谢你的提示。我在找这种工具。谢谢你,莱斯!在发布问题之前检查了这篇文章,并说必须仔细阅读。谢谢米洛斯拉夫的回答!当然,我会查看你的博客。