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

时间:2008-11-01 18:21:06

标签: mysql synchronization

您是否知道同步两个数据库的任何应用程序 - 在开发期间,有时需要添加一个或两个表行或新表或列。 通常我会在某个文件中编写每个sql语句,并且在上传路径中,我会在生产数据库中执行这些行(之前备份它)。 我使用mySQL和postreSQL数据库。

您的实践是什么,以及哪些应用可以帮助您。

13 个答案:

答案 0 :(得分:27)

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

由Jeff Atwood提供并由K. Scott Allen撰写的这组链接详细解释了这应该是什么样的 - 他们做得比我在这里写的更好:http://www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html

答案 1 :(得分:5)

有脚本(当然是在源代码管理下),你只需添加到底部。结合从生产数据库到开发人员的定期恢复,你应该是金色的。如果你严格要求,这很有效。

否则我知道很多人都在为SQLServer使用redgate。

答案 2 :(得分:5)

对于PostgreSQL,您可以使用Another PostgreSQL Diff Tool 。它可以非常快速地区分两个SQL转储(数据库上的几秒钟,具有大约300个表,50个视图和500个存储过程)。因此,您可以轻松找到您的更改并获得可以执行的SQL差异。

来自APGDiff页面:

  

另一个PostgreSQL Diff Tool是一个简单的PostgreSQL diff工具,可用于模式升级。该工具比较两个模式转储文件,并创建适合升级旧模式的输出文件(在一些手工修改之后)。

答案 3 :(得分:5)

RedGate SQL Compare的另一次投票

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

不想没有它就活着!

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

答案 4 :(得分:2)

如果您为开发数据库编写SQL语句(我想是一系列DDL指令,如CREATE,ALTER和DROP),为什么不通过将它们记录在表中来跟踪它们,一个“版本”索引?然后你就可以:

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

答案 5 :(得分:1)

我非常喜欢EMS tools

有适用于所有流行数据库的工具,您可以为每种类型的数据库提供相同的用户体验。

其中一个工具是DB Comparer。

答案 6 :(得分:1)

TOAD

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

redgate也很好。

答案 7 :(得分:0)

Siebel(CRM,销售等管理产品)有一个内置工具,用于将生产数据库与开发数据库(dev2prod)对齐。

否则,您必须坚持使用手动执行的脚本。

答案 8 :(得分:0)

Navicat有一个结构同步向导来处理这个问题。

答案 9 :(得分:0)

我使用Hibernate解决了这个问题。它可以检测并自动创建丢失的表,列等。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

这是我用于同步Magento数据库的直接linux bash脚本...但您可以轻松地将其修改为其他用途:)

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

答案 12 :(得分:0)

DBV - “数据库版本控制,变得简单!” (PHP)