Php Mercurial更新之间的数据库同步

Php Mercurial更新之间的数据库同步,php,mysql,mercurial,sync,bitbucket,Php,Mysql,Mercurial,Sync,Bitbucket,因此,我有一个访问相同BitBucket存储库的开发和生产环境,我将更改推送到repo,通过使用hg pull和hg update在生产服务器上下拉 这使我的PHP代码始终保持最新状态,运行良好 但是我可以使用一些建议来保持我的MySQL模式在两个环境之间的同步。例如,我经常在开发机器上进行更改,以反映在生产服务器上 我们将非常感激您提供的任何建议。简而言之,您要做的是对数据库模式进行版本设置,以便在情况发生变化时与代码保持一致。能够做到这一点的关键部分是能够跟踪对DB模式的更改,并且能够跟踪D

因此,我有一个访问相同BitBucket存储库的开发和生产环境,我将更改推送到repo,通过使用
hg pull
hg update
在生产服务器上下拉

这使我的PHP代码始终保持最新状态,运行良好

但是我可以使用一些建议来保持我的MySQL模式在两个环境之间的同步。例如,我经常在开发机器上进行更改,以反映在生产服务器上


我们将非常感激您提供的任何建议。

简而言之,您要做的是对数据库模式进行版本设置,以便在情况发生变化时与代码保持一致。能够做到这一点的关键部分是能够跟踪对DB模式的更改,并且能够跟踪DB模式的当前状态(即,它是什么版本)

跟踪模式更改的一种方法是手动编写模式所有更改的脚本。这些更改脚本本质上是模式版本之间的“差异”。生成这些更改文件的另一种方法是使用一个程序,该程序可以在两个数据库之间或数据库与创建脚本之间生成差异。理论上,您应该能够开发一个预提交钩子脚本,该脚本可以从当前数据库为该工作副本生成alter脚本,并从以前的数据库为该工作副本生成alter脚本,但这不是一项简单的任务

一旦对数据库进行了版本控制,现在就必须解决在
Update
上应用这些更改的问题。要做到这一点,您需要开发一个更新后挂钩,它可以查看数据库(可能是数据库中链接到Mercurial变更集Id的某种
版本
表),并确定需要运行哪些脚本才能使数据库最新

由于Mercurial允许您更新到以前的版本,因此您要么只需对数据库进行不间断的更改,要么干脆不允许(从社会意义或技术意义上)将生产工作副本更新到以前的版本。不管您如何处理它,执行实际DB更新的更新后钩子脚本可能需要足够智能,以尝试应用已经应用的DB alter脚本


为了让这一切正常工作,显然有许多问题需要解决,还有很多测试要做,而且它无论如何都不是为您预先构建的解决方案,但它应该能让您在自动化DB更新的过程中取得良好的效果,从而使它们与您的代码保持一致。祝你好运

看看Rails框架。他们使用数据库迁移来操作(甚至创建)数据库。它与测试以及跨开发机器(对于团队)进行了很好的集成。它是Ruby(许多人认为它比PHP更可取),因此除非您切换,否则它不会对您起作用,但它可能会为您的应用程序提供一些如何实现这一点的想法

迁移是一种方便的方法 您需要在 有条理、有组织的方式。你 可以手工编辑SQL的片段 但那你就要负责了 告诉其他开发人员 我们需要去管理他们。你也会 必须跟踪哪些更改 需要针对生产运行 下一次部署时的计算机

活动记录跟踪哪些迁移 已经运行了,所以您所拥有的 要做的是更新源代码并运行 rakedb:migrate。活动记录将 确定应该进行哪些迁移 跑它还将更新您的 db/schema.rb文件以匹配 数据库的结构


什么?Magento和这有什么关系?太好了。。。许多其他工具也可以这样做。Magento与这个问题无关,也与答案无关,只是它可以帮助解决这个问题。