跟踪数据库结构中所做的更改

3

我该如何追踪数据库的所有更改?

我需要一种方法来确定我对数据库进行了哪些更改,以便我可以在另一个服务器上进行相同的更改。

例如,如果我在其中一个表格中添加了一个新字段,我想知道这个字段是什么,以便我可以将该字段添加到另一个数据库中。

7个回答

9
人们通常在面对这些问题时会经历以下步骤:
  1. 根据需要更改开发数据库。

  2. 准备部署新版本的应用程序,意识到生产数据库也需要更新并保留数据。

  3. 转储生产和开发模式,手动比较架构创建脚本。头撞墙。编写更改脚本以更新生产数据库。

  4. 意识到在更新开发数据库时需要从头编写更改脚本,而不是随意添加和更改内容。

  5. 找到一种命名方案来为这些更改脚本进行版本控制,以便任何安装都可以从旧版本升级到新版本。

  6. 将数据库创建和更改脚本放入源代码控制中。

确保您不必每次都重复执行1-3,而是要做4-6,这样您就不必每次都重复执行1-3。

+1:请注意“完成4-6”的事项。最好的方法是在开发过程中找到一种控制升级的方式,并将SQL脚本应用于生产数据库。然后在数据库中包含一个“更改日志”,每当运行升级脚本时,都要插入其中。 - D.Shawley

2

看看LiquiBase

它允许您将数据库更改描述为XML文件,因此您可以像处理代码一样在版本控制系统中维护数据库结构。


LiquiBase相对于@Anonym提供的(好的)建议的优势在于,LiquiBase允许您管理和控制数据库更改,而不仅仅是对变更做出反应。 - DaveParillo

0
一种非自动化但有用的跟踪数据库更改的方法是使用MySQL Query Browser。它会记录您在使用它时运行的所有操作的历史记录。这使得组装更改脚本非常简单明了。
显然,如果您想要复制所有用户所做的更改,这不是一个解决方案。但是,如果您只想按正确顺序保留一组更改并避免重新输入它们,那么它非常有效。

0
你考虑过使用MySQL Replication来完成这个任务吗?除非你有某些特殊原因必须自己实现,否则你真的不想这样做。

1
只有当数据库实际上是彼此的副本时,才能起作用。更常见的情况是,您拥有不同的安装和不同的数据 - 但在更新与数据库通信的其余软件时,两者都需要更新到相同的模式。 - nos
谢谢您的回复,但是复制似乎不是解决方案,因为我需要知道对数据库所做的更改。 - Pranay

0

phpmyadmin在今年夏天由Tomas Srnka负责复制的GSoC项目。我认为它已经进入了主干。


当php_script_max_time达到时,phpmyadmin将会停止运行,因此它只适用于做小改动;否则它就像无用的东西一样毫无意义。说真的,不要使用它,使用命令行。 - dusoft

0

谢谢回复。我正在使用EMS SQL Manager,如何使用此工具来比较数据库? - Pranay
另外,WebYog SQLYog Ultimate非常不错 https://www.webyog.com/product/sqlyog - vicenteherrera

0

我在网上阅读了关于模式的内容,这是一种比较数据库并查找任何更改的有用方法吗?


请查看我的回答,pma现在已经集成了同步和复制支持。 - knittl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接