我目前正在开发一个使用MySQL数据库的应用程序。
数据库结构在开发过程中仍在变化和变化(我更改本地副本,只保留测试服务器上的副本)。
是否有一种方法可以比较数据库的两个实例,以查看是否有任何更改?
虽然目前简单地丢弃之前的测试服务器数据库是可以的,但是随着测试开始输入测试数据,这可能会变得有点棘手。
同样的情况会在以后的制作中再次发生……
是否有一种简单的方法来增量地对生产数据库进行更改,最好是自动创建一个脚本来修改它?
答案中提到的工具:
Red-Gate的MySQL模式和数据比较(商用)
Maatkit(现为Percona)
liquibase
蟾蜍
Nob Hill数据库比较(商业)
MySQL Diff
SQL EDT(商用)
如果您只需要比较模式(而不是数据),并且可以访问Perl,那么mysqldiff可能会起作用。我使用它是因为它允许您比较本地数据库和远程数据库(通过SSH),因此不需要转储任何数据。
http://adamspiers.org/computing/mysqldiff/
它将尝试生成SQL查询来同步两个数据库,但我不相信它(实际上也不相信任何工具)。据我所知,没有100%可靠的方法来逆向工程将一个数据库模式转换为另一个数据库模式所需的更改,特别是在已经进行了多个更改的情况下。
例如,如果您只更改一个列的类型,自动化工具可以轻松地猜测如何重新创建该列。但是,如果您还移动列,重命名它,并添加或删除其他列,那么任何软件包所能做的最好的事情就是猜测可能发生了什么。最后可能会丢失数据。
我建议跟踪您对开发服务器所做的任何模式更改,然后在活动服务器上手动运行这些语句(或将它们滚动到升级脚本或迁移中)。这样比较乏味,但可以保证数据的安全。当你开始允许终端用户访问你的网站时,你真的会不断地对数据库进行大量的更改吗?