php - Mercurial 更新之间的数据库同步

标签 php mysql mercurial synchronization bitbucket

因此,我有一个访问同一个 BitBucket 存储库的开发和生产环境,我将更改推送到存储库,然后使用 hg pull 下拉生产服务器 Mercurial 更新

这使我的 PHP 代码保持最新并且工作正常。

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

非常感谢收到有关如何执行此操作的任何建议。

最佳答案

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

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

一旦您对数据库进行了版本控制,您现在必须解决在 Update 上应用这些更改的问题。为此,您需要开发一个更新后 Hook ,它可以查看数据库(可能是其中链接到 Mercurial 变更集 ID 的某种 Version 表)并确定脚本需要什么运行以使数据库保持最新状态。

由于 Mercurial 允许您更新到以前的版本,您将只需要对数据库进行非破坏性更改,或者干脆不允许(在社会意义上或技术意义上)更新生产工作副本到以前的版本。无论您如何处理它,执行实际数据库更新的更新后 Hook 脚本可能需要足够聪明,以尝试应用它已经应用的数据库更改脚本。

显然有许多问题需要解决,需要进行大量测试才能使这一切正常工作,无论如何它都不是为您准备的解决方案,但它应该能让您顺利上路使您的数据库更新自动化以使其与您的代码保持一致。祝你好运!

关于php - Mercurial 更新之间的数据库同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5731294/

相关文章:

php - 通过网站数据库的 Paypal - 这可能吗?

mysql:无法识别的语句类型。 (靠近WITH)

mysql - MYSQL 中当前行上(和包括)日期之前的所有行的总和

c# - MYSQL 计数或求和默认值

windows - 使用复制粘贴移动 hg repo 文件夹?

git - 捆绑提交/在推送时保持提交私有(private)

php - 是否有可能计算类似 mysql 结构的匹配数?

php - 使用 AJAX 从下拉列表更改图像

php - 如何根据 bcrypt 哈希验证用户提交的密码?

version-control - 从 RTC Jazz 导出版本控制信息和历史记录