将MySQL数据库放在版本控制下?

我目前正在为我的PHP项目使用SVN。 我以为我应该让我的数据库在版本控制下,但是最好的办法是什么? 我只是在SVN中的项目中创build一个db文件夹,将SQL更改粘贴到一个名为from_1.0_to_2.0.sql的文件中并提交?

无论何时对数据库进行更改,都应将这些更改保存在迁移中,以便稍后在更新代码的同时在其他服务器上运行这些更改。 但你基本上有正确的想法。 您可以编写一些工具使其更加自动化; 例如版本每个文件,然后在数据库中创build一个像migration_version这样的表,其中将包含数据库的当前版本。 然后,您可以创build一个迁移脚本,该脚本将运行所需的所有迁移以使数据库保持最新状态。

请注意,如果您需要双向数据库版本控制(以便您还可以恢复到之前的数据库版本),则还需要为每个版本编写所需的查询。

还有一些工具可以帮助你编写迁移,比如MySQLdiff

请注意,最近(2012年12月),您有另一种select: DBV(DataBase Version)

它基于这个Github项目 ,是一个数据库版本控制Web应用程序,具有模式pipe理,修订脚本等等。

数据库模式

查看

Liquibase

http://www.liquibase.org/quickstart

这个想法是这样的:

所有数据库更改都以可读的可跟踪forms存储,并签入源代码pipe理。 – Liquibase.org首页

这是一个非常棒的软件,它可以让你对数据库进行版本升级,这个过程与最高评分的答案基本相同,除了这个轮子已经被写入并准备好滚动。 我在工作中使用它,这是一个梦幻般的解决scheme。 如果你想了解它是如何工作的,你可以自己实现,但是如果你想要一个工具来完成工作,Liquibase是非常棒的。

您可以使用MySQL Workbench工具 。

使用build模工具生成的文件可以保存在SVN下。 该工具允许您双向同步数据库与模型。

Laravel中的迁移 – PHP框架看起来非常有用,但有一个很大的问题。 这里只有一个在线工具,用laravel ORM语言来devise模式,叫做“雄辩”( 这里 )。 因此,如果您需要devise和维护一些严重项目的数据库,它仍然是不可用的。