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

该数据库结构仍在变化和变化的同时发展的进展(我改变我的当地复制,使离开一个试验单独的服务器).

是否有一个方式比较两个实例的数据库,以查看是否有任何变化?

虽然目前只是废弃先前的测试服务器数据库是好的,因为测试启动进入测试数据可能会有点棘手。
同样,虽然更多,所以会发生,再次在后面的生产...

是有一个简单的方法逐步作出改变的生产数据库,最好通过自动创造一个脚本以修改?


中提到的工具的答案:

有帮助吗?

解决方案

如果您使用的是小型数据库我发现运行的快照上的这两个数据库与 --skip-comments--skip-extended-insert 选项产生的SQL脚本,然后运行的差异在SQL脚本工作得很好。

通过跳过的意见您避免毫无意义的差异,如时你跑的快照的命令。通过使用 --skip-extended-insert 命令你保证每个行插入与其自己的插入的发言。这消除了这种情况在一个新的或修改的记录可能会导致一个链反应在所有未来插入的发言。运用这些选项产生更大的垃圾场没有意见,所以这可能不是你想要做的东西在生产中的使用,但发展应当的罚款。我已经把实例的命令我用如下:

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 有数据和模式进行比较的特点,而且我相信它将甚至创建一个同步的脚本。最好的是,它是免费的。

我使用的软件,称为 我们 为:

  • 同步的现场数据库对我的测试数据库。
  • 表明两者之间的差异的数据库。

它花费的钱,它是windows和mac只,它有一个古怪的UI,但我喜欢它。

有一个架构的同步的工具 SQLyog (商业)产生SQL同步的两个数据库。

enter image description here

从功能的对比列表... MySQL工作台 提供架构差异和方案同步,在他们的社区的版本。

有许多方面肯定,但在我的情况下,我喜欢倾弃场和差异的指令。因此,这里是一个脚本的基础上Jared的评论:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

反馈意见是值得欢迎:)

dbSolo,它是支付,但这个要素可能是一个你正在寻找 http://www.dbsolo.com/help/compare.html

它适用Oracle,Microsoft SQL服务器、Sybase、DB2、固体、PostgreSQL H2和MySQL alt text

如果你只需要比较模式(无数据),并访问Perl,mysqldiff可能的工作。我使用它,因为它可以让你比较本地数据库,以远程数据库(通过SSH),所以你不需要费心倾倒任何数据。

http://adamspiers.org/computing/mysqldiff/

它会试图产生SQL queries同步两个数据库,但是我不相信它(或任何工具,实际上).据我所知,没有100%可靠的方式进行反向工程所需的更改,所以转换成一个数据库架构到另一个,尤其是在多已经作了修改。

例如,如果你改变只列的类型,一个自动化的工具,可以很容易地想如何重建。但如果你还动柱,重新命名,以及添加或删除的其他列,最好的任何软件包可以做的是猜测可能发生。和你最终可能会丢失数据。

我建议跟踪的任何模式的变化所做的发展服务器,然后运行的这些声明的一方面在生活的服务器(或滚动他们进入一个升级脚本或迁移).这是更多的繁琐,但它会把你的数据的安全。和你的时候开始允许终端用户接到你的网站,你真的是会不断重数据库的变化?

检查: http://schemasync.org/ 该schemasync工具的工作对我来说,这是一个命令行工具可很容易地在linux的命令行

还有另外一个开放源的命令行mysql-diff工具:

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

没一个有用的工具,编写使用perl叫 Maatkit.它有几个数据库进行比较和同步的工具,除其他事项。

SQL比较通过展鹏 http://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy,以帮助数据库的改革管理自动化方式 http://dbdeploy.com/

为我自己,我会开始倾倒了两个数据库和比较的垃圾场,但是如果你想自动生成合并的脚本,你要想要得到一个真正的工具。

一个简单的 Google搜索 变成了以下工具:

看看 [x]的数据比较MySQL.这是一个共享软件30天的试用期。这是一个快速MySQL GUI工具进行数据的比较和同步的、管理的数据差异,并定同步。

dbForge Data Compare for MySQL

几个小时后搜索网为简单的工具,我意识到我没有看在Ubuntu软件中心。这里是免费的解决方案,我发现:http://torasql.com/ 他们要求有一个版本的Windows,但我只有使用它在Ubuntu。

编辑:2015-Feb-05 如果你需要Windows工具,蟾蜍是完美的和免费的:http://software.dell.com/products/toad-for-mysql/

Apache zeta组成的图书馆是一个通用图书馆的loosly耦合元件对发展的应用基于PHP5.

eZ组成部分-DatabaseSchema 您可以:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

你可以检查这里的教程:http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html

非常容易使用的比较和同步的工具:
数据库。 http://www.clevercomponents.com/products/dbcomparer/index.asp

优点:

  • 快速
  • 容易使用
  • 容易的选择改变申请

缺点:

  • 不同步长为微小的整数
  • 不同步索引的名称正确
  • 不同步的评论

我认为 我们MySQL 将有助于这种情况。它支持数据和结构的同步MySQL. enter image description here

第一部分的问题,我只是做一个垃圾场的两个和差异。不知道mysql,但postgres pg_dump有一个命令只要转储的模式,但无表的内容,所以你可以看到,如果你已经改变了的架构任。

我的工作与Nob Hill的市场营销的团队,我想告诉你我会很高兴听到你的问题、建议或其他任何东西请随时与我联系。

我们最初决定建立我们的工具,从零开始,因为同时还有其他这类产品在市场上,他们没有做的工作的权利。就很容易向你展示之间的差异的数据库。这是另一回事,实际上使一个数据库等其他。顺利移徙的模式和数据,始终是一项挑战。好吧,我们已经实现了它在这里。
我们因此相信,它可以为您提供一个平稳的移徙,比如果它不能–如果移徙脚本生成的不可读足够或不会为你工作,我们不能修复它在五个工作日–你会得到你自己的自由的副本!

http://www.nobhillsoft.com/NHDBCompare.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top