php - 跟踪数据库架构更改的机制

标签 php mysql database svn migration

跟踪和/或自动化数据库架构更改的最佳方法是什么?我们的团队使用 Subversion 进行版本控制,并且我们已经能够通过这种方式自动化我们的一些任务(将构建推送到临时服务器,将经过测试的代码部署到生产服务器),但我们仍在手动进行数据库更新。我想找到或创建一个解决方案,让我们能够在具有不同环境的服务器上高效工作,同时继续使用 Subversion 作为后端,通过它将代码和数据库更新推送到各种服务器。

许多流行的软件包都包含自动更新脚本,可检测数据库版本并应用必要的更改。即使在更大规模(跨多个项目,有时跨多个环境和语言),这是否是最好的方法?如果是这样,是否有任何现有的代码可以简化流程,或者最好只是推出我们自己的解决方案?之前有没有人实现过类似的东西并将其集成到 Subversion 提交后 Hook 中,或者这是一个坏主意?

虽然支持多个平台的解决方案会更好,但我们肯定需要支持 Linux/Apache/MySQL/PHP 堆栈,因为我们的大部分工作都在该平台上。

最佳答案

在 Rails 世界中,存在迁移的概念,即在 Ruby 中对数据库进行更改的脚本,而不是特定于数据库的 SQL 风格。您的 Ruby 迁移代码最终被转换为特定于您当前数据库的 DDL;这使得切换数据库平台非常容易。

对于您对数据库所做的每一次更改,您都会编写一个新的迁移。迁移通常有两种方法:应用更改的“向上”方法和撤消更改的“向下”方法。单个命令使数据库保持最新,也可用于将数据库带入特定版本的模式。在 Rails 中,迁移保存在项目目录中自己的目录中,并像任何其他项目代码一样检查到版本控制中。

This Oracle guide to Rails migrations很好地涵盖了迁移。

使用其他语言的开发人员已经研究了迁移并实现了他们自己的特定语言版本。我知道 Ruckusing ,一个模仿 Rails 迁移的 PHP 迁移系统;它可能就是你要找的东西。

关于php - 跟踪数据库架构更改的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607/

相关文章:

php - Codeigniter - session 过期和 "remember me"功能

java - 使用 JDBC 更新查询 mysql

MySQL程序

jquery,以分钟为单位获取时差

Android - 单击按钮时插入 mysql 数据库

sql - 建议 : dilemma in designing typical user-group-relation DB tables

java - 如何将批量数据单独插入到mongoDB中?

php - 强制从服务器下载 zip 不起作用

php - session_start 耗尽内存

mysql - 如何对 varchar 进行排序