如何在不迁移特定框架的情况下进行数据库版本控制?

时间:2015-08-19 11:11:34

标签: php mysql database version-control version-control-migration

我知道迁移是对数据库模式进行版本控制的一种方法。但是,由于我有一个由多个项目共享的数据库,并且每个项目都可能会稍微更改架构。所以,我需要像分支和合并函数一样的代码,例如git代码,其中迁移不能提供这样的功能。那么,是否有专门针对数据库的版本控制工具?

我们正在使用带laravel和mysql的php作为数据库,如果需要,我们愿意切换到postgresql。

7 个答案:

答案 0 :(得分:7)

您可以在项目的git存储库中设置所有setup .sql文件。因为您提到许多项目使用此数据库,所以对数据库使用单个存储库 可能是明智的:

请考虑以下目录由git管理:

setup.php
setup/
----- Create_database.sql
----- Create_users_table.sql
----- Create_posts_table.sql
----- Create_some_view.sql

setup.php现在可用于执行安装目录中的所有.sql文件,以使数据库更易于部署/克隆。当您需要对数据库进行更改时,只需使用已经内置到git中的功能来分支并将更改合并到此存储库中。

答案 1 :(得分:2)

dbv.php是您可以使用的数据库版本控制应用程序。 Here是Sitepoint关于如何使用它的文章。

答案 2 :(得分:2)

如上所述,企业有很多工具。我个人去创建自己的。我使用api dbdeploy。

它的工作原理:编写增量脚本 1_c_table_t.sql 2_c_uk_index_t.sql ... 它需要数据库中的一个表来存储所有文件号。成功插入sql后,它会在版本表中插入。

我正在研究多个团队,我在github中创建了一个repo,所有开发者repos都依赖于此。 api使用第一个数字来识别脚本。

感谢

答案 3 :(得分:1)

您可以尝试Phinx我目前正在使用另一个答案中提到的dbv.php,但Phinx似乎有更高级的选项可以帮助您实现目标。可以在http://docs.phinx.org/en/latest/找到文档,作者here

有一个示例项目。

答案 4 :(得分:0)

我为一家公司工作,该公司在我们的源代码控制服务器上有一个钩子,在提交时,它会运行一个脚本,在它的核心创建了一个来自我们的dev和staging数据库的mysql架构转储,以及它们之间的差异如果运行,它将创建一个sql脚本,如果运行,将允许更改第三个数据库(临时副本)以生成具有与dev相同的模式的数据库,但包含暂存的所有数据。然后它将运行所有测试,如果它们成功,它将显示sql delta脚本,在生产中运行是安全的。
只要您有一个事件,此时您就可以运行脚本,您可以类似地生成一个sql脚本,将架构向前移动到新的增量。
另一种方法是简单地跟踪sql架构,在每个更改的版本控制中,但这意味着它需要一个人来解决(来自统一差异),实现更改需要什么样的SQL 。

答案 5 :(得分:0)

答案很简单。只需使用指定db模式的.sql文件。根据需要为您分支并修改.sql文件。您可以指定创建数据库和表所需的任何内容。

如果您需要一些东西,可以在数据库上执行mysqldump并从中开始。在源代码控制分支中拥有该文件后,合并在此之后很简单。

另一种选择是创建基本数据库转储,然后使用各种更改脚本来自定义数据库以满足您的需求。让不同的项目加载数据库转储,然后应用适当的脚本。

答案 6 :(得分:0)

使用像Phinx这样的工具,您可以拥有更多选项和功能。链接到github存储库https://github.com/robmorgan/phinx

相关问题