我目前正在开发一个使用MySQL数据库的应用程序。

数据库结构在开发过程中仍在变化和变化(我更改本地副本,只保留测试服务器上的副本)。

是否有一种方法可以比较数据库的两个实例,以查看是否有任何更改?

虽然目前简单地丢弃之前的测试服务器数据库是可以的,但是随着测试开始输入测试数据,这可能会变得有点棘手。 同样的情况会在以后的制作中再次发生……

是否有一种简单的方法来增量地对生产数据库进行更改,最好是自动创建一个脚本来修改它?


答案中提到的工具:

Red-Gate的MySQL模式和数据比较(商用) Maatkit(现为Percona) liquibase 蟾蜍 Nob Hill数据库比较(商业) MySQL Diff SQL EDT(商用)


当前回答

还有一个开源命令行mysql-diff工具:

http://bitbucket.org/stepancheg/mysql-diff/

其他回答

就我个人而言,我将从转储两个数据库开始,并对转储进行差异处理,但如果您希望自动生成合并脚本,则需要使用真正的工具。

简单的谷歌搜索可以找到以下工具:

MySQL工作台,有社区版(OSS)和商业版。 Nob Hill数据库比较,免费提供MySQL。 其他SQL比较工具的列表。

在SQLyog(商业)中有一个模式同步工具,它可以生成用于同步两个数据库的SQL。

如果您正在使用小型数据库,我发现在两个数据库上运行mysqldump,使用——skip-comments和——skip-extended-insert选项生成SQL脚本,那么在SQL脚本上运行diff效果非常好。

By skipping comments you avoid meaningless differences such as the time you ran the mysqldump command. By using the --skip-extended-insert command you ensure each row is inserted with its own insert statement. This eliminates the situation where a single new or modified record can cause a chain reaction in all future insert statements. Running with these options produces larger dumps with no comments so this is probably not something you want to do in production use but for development it should be fine. I've put examples of the commands I use below:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

对于问题的第一部分,我只是把两者都做了一下,并将它们区别开来。不确定mysql,但postgres pg_dump有一个命令,只转储模式而不转储表内容,所以你可以看到你是否改变了模式。

通过RedGate进行SQL比较 http://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy以自动化的方式帮助进行数据库变更管理 http://dbdeploy.com/