想知道是否有可能对MySQL数据库进行版本控制。
我意识到这个问题以前已经被问过了,不过最新的已经快一年前了,而且事情变化的速度很快......
问题在于每个开发人员都在自己的计算机上拥有Apache/MySQL/PHP,他们有时会编辑数据库。如果他们不得不向所有其他开发人员发送电子邮件,然后手动编辑测试服务器的数据库,这将是相当不方便的。
你如何解决这个问题?
谢谢
想知道是否有可能对MySQL数据库进行版本控制。
我意识到这个问题以前已经被问过了,不过最新的已经快一年前了,而且事情变化的速度很快......
问题在于每个开发人员都在自己的计算机上拥有Apache/MySQL/PHP,他们有时会编辑数据库。如果他们不得不向所有其他开发人员发送电子邮件,然后手动编辑测试服务器的数据库,这将是相当不方便的。
你如何解决这个问题?
谢谢
这并不是一个MySQL相关的解决方案,但我们已经成功地使用了一个名为Liquibase的产品。(http://www.liquibase.org/)
Liquibase是一个迁移解决方案,涵盖了许多不同的数据库供应商,允许所有的数据库更改都编码在配置文件中,并保存在Subversion中。由于所有配置都保存在XML文件中,所以很容易将其他人的更改合并到主线脚本中,并且它与标签和分支一起使用效果非常好。
可以通过运行“更新数据库”命令将数据库升级到当前修订级别。大多数更改还具有回滚数据库更改的能力,这也可能会有帮助。我建议在运行迁移之前确保获取到最新版本,因为这可能是最容易的方法。
最后,在生产交付时,您可以选择将所有数据库更改输出为完整的SQL脚本,以便DBA运行它并维护分离职责。
到目前为止,它工作得非常好。
我们使用Rails来保留所有迁移文件中的更改。我知道一些PHP框架也会做同样的事情,例如Symphony。因此,当所有更改合并到我们的代码库(我们使用mercurial)中时,我们可以看到在开发过程中需要或已应用于数据库的所有迁移更改。然后,负责生产的人在进行完整备份后将代码推向生产环境。但是,如果您不使用能够处理此问题的PHP框架,则awied的建议听起来非常有趣-我以前没有听说过liquidbase,但我肯定会去了解一下。
有一个叫做iBatis的工具,现在被称为MyBatis,可以完美地处理数据库的版本。
将所有更改都放在脚本中而不是图形工具中需要一些工作,但如果您熟悉编码,这不是问题。
当您拥有多个数据库(例如dev-test-prod)时,只需创建3个环境文件,就可以使用一个命令行指令更新一个环境。