我知道迁移是对数据库模式进行版本控制的一种方法。但是,由于我有一个由多个项目共享的数据库,并且每个项目都可能会稍微更改架构。所以,对于代码,我需要像 git 这样的分支和合并功能,而迁移不能提供这样的功能。那么,有没有专门针对数据库的版本控制工具呢?
我们将 php 与 laravel 和 mysql 用于数据库,如果需要,我们愿意切换到 postgresql。
我知道迁移是对数据库模式进行版本控制的一种方法。但是,由于我有一个由多个项目共享的数据库,并且每个项目都可能会稍微更改架构。所以,对于代码,我需要像 git 这样的分支和合并功能,而迁移不能提供这样的功能。那么,有没有专门针对数据库的版本控制工具呢?
我们将 php 与 laravel 和 mysql 用于数据库,如果需要,我们愿意切换到 postgresql。
.sql
您可以在项目的 git 存储库中设置所有设置文件。因为您提到许多项目都使用此数据库,所以为数据库专门使用单个存储库可能是明智的:
考虑以下目录由 git 管理:
setup.php
setup/
----- Create_database.sql
----- Create_users_table.sql
----- Create_posts_table.sql
----- Create_some_view.sql
setup.php
现在可用于执行.sql
setup 目录中的所有文件,以使数据库更易于部署/克隆。当您需要对数据库进行更改时,只需使用 git 中已经内置的功能将更改分支并合并到此存储库中。
如上所述,有很多工具企业。我个人去创造我自己的。我使用 api dbdeploy 。
它的工作原理:编写你的增量脚本 1_c_table_t.sql 2_c_uk_index_t.sql ...它需要在数据库中存储所有文件编号的表。成功插入 sql 后,它会在版本表中插入。
多个团队致力于此,我在 github 中创建了一个仓库,所有开发人员的仓库都依赖于此。api 使用第一个数字来识别脚本。
谢谢
使用像 Phinx 这样的工具,您可以获得更多选项和功能。链接到 github 存储库https://github.com/robmorgan/phinx
您可以尝试Phinx我目前使用另一个答案中提到的 dbv.php,但 Phinx 似乎有更高级的选项可以帮助您实现目标。可以在这里找到文档http://docs.phinx.org/en/latest/并且有一个示例项目由作者在这里完成
我在一家公司工作,该公司在我们的源代码控制服务器上有挂钩,它在提交时会运行一个脚本,该脚本的核心是从我们的开发和暂存数据库以及这些模式之间的差异创建一个 mysql 模式转储,它将创建一个 sql 脚本,如果运行该脚本,将允许更改第三个数据库(暂存的副本)以生成与 dev 具有相同架构的数据库,但包含暂存的所有数据。然后它将随后运行所有测试,如果它们成功,它将显示 sql delta 脚本,以便在生产环境中安全运行。
只要您有一个事件,此时您可以运行一个脚本,您就可以类似地生成一个 sql 脚本,将架构向前移动到新的增量。
另一种方法是简单地跟踪 sql 模式,在每次更改的版本控制中,但这意味着它需要一个人来解决(从统一差异),实现更改需要什么 sql .
答案很简单。只需使用.sql
指定数据库模式的文件。根据需要为您分支和修改不同的 .sql 文件。您可以指定您需要的任何内容,例如创建数据库和表。
如果你需要一些东西来开始,你可以mysqldump
在你的数据库上做一个并从它开始。在源代码控制分支中拥有文件后,合并就很简单了。
另一种选择是创建您的基本数据库转储,然后使用各种更改脚本来自定义数据库以满足您的需求。让不同的项目加载数据库转储,然后应用适当的脚本。