如何同步开发和生产数据库
你知道任何应用程序来同步两个数据库 – 在开发过程中,有时需要添加一个或两个表行或新的表或列。 通常我会在某个文件中写入每个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 “索引? 您将可以:
- 跟踪您的版本更改
- 做一个小程序,通过将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)