如何同步开发和生产数据库

你知道任何应用程序来同步两个数据库 – 在开发过程中,有时需要添加一个或两个表行或新的表或列。 通常我会在某个文件中写入每个sql语句,并且在上传path中,我会在生产数据库中对这些行进行更新(先前对其进行备份)。 我使用mySQL和postreSQL数据库。

你的做法是什么,什么应用程序可以帮助你。

你要求一个工具或应用程序的答案,但你真正需要的是一个过程的答案。 这里的基本主题是您应该对数据库DDL(和DML,需要时)进行版本控制,并提供更改脚本以便能够将数据库的任何版本更新到更高版本。

杰夫·阿特伍德(Jeff Atwood)提供的这组链接由K. Scott Allen编写,详细解释了这应该是什么样子 – 而且他们做得比我在这里写得更好: http : //www.codinghorror.com/blog/ 2008/02 / GET-您的数据库,下版本control.html

对于PostgreSQL,您可以使用另一个PostgreSQL差分工具 。 它可以非常快速地分析两个SQL转储(在包含大约300个表,50个视图和500个存储过程的db上几秒钟)。 所以你可以很容易地find你的改变,并得到一个你可以执行的SQL差异。

从APGDiff页面:

另一个PostgreSQL差异工具是简单的PostgreSQL差异工具,对模式升级很有用。 该工具比较两个模式转储文件,并创build适合升级旧模式的输出文件(经过一些手工修改)。

有脚本(当然在源代码控制下),你只能添加到底部。 结合定期从生产数据库恢复到开发你应该是金。 如果你严格的话,这个效果很好。

否则,我知道很多人使用SQLServer的redgate的东西。

另一个投票的RedGate SQL比较

http://www.red-gate.com/products/SQL_Compare/index.htm

不想活下去!

编辑:对不起,这似乎只适用于SQL Server。 仍然 – 如果任何SQL Server用户有相同的问题,我一定会推荐这个工具。

如果你为你的开发数据库编写你的SQL语句(我想象的是一系列的DDL指令,例如CREATE,ALTER和DROP),为什么不把它们logging在一张表中,跟一个“version “索引? 您将可以:

  1. 跟踪您的版本更改
  2. 做一个小程序,通过将logging的指令发送到数据库来允许生产数据库的“自动”更新。

我真的很喜欢EMS工具 。

有所有stream行的数据库的工具,你有相同的用户体验每种types的数据库。

其中一个工具是DB Comparer。

蟾蜍

过去多次攒了好多屁股。 为什么人们在没有退出策略的情况下运行sql?

红门也是好的。

Siebel(CRM,Sales等pipe理产品)有一个内置的工具来将生产数据库与开发工具(dev2prod)alignment。

否则,你必须坚持手动执行的脚本。

Navicat有一个处理这个的结构同步向导。

我通过使用Hibernate来解决这个问题。 它可以检测和自动创build缺失的表,列等

您可以使用dbDeploy或类似的脚本为当前的处理方式添加一些自动化function。 这将允许您跟踪模式更改,并根据需要升级/回滚模式。

这是我写的用于同步Magento数据库的直接Linux bash脚本…但是您可以轻松修改它以用于其他用途:)

http://markshust.com/2011/09/08/syncing-magento-instance-production-development

DBV – “数据库版本控制,轻松搞定 !” (PHP)