mysql对比数据 - sql比较两个表的数据




比较两个MySQL数据库 (14)

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

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

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

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

有没有办法比较数据库的两个实例以查看是否有任何更改?

虽然目前简单地放弃以前的测试服务器数据库是好的,但当测试开始输入测试数据时,它可能会有点棘手。
尽管如此,稍后会在生产中再次发生......

是否有一种简单的方法可以逐步对生产数据库进行更改,最好是通过自动创建脚本来修改它?

答案中提到的工具:



Toad具有数据和模式比较功能,我相信它甚至会创建一个同步脚本。 最重要的是,它是免费的。


SQLyog (商业版)中有一个Schema Synchronization Tool,用于生成用于同步两个数据库的SQL。


如果你只需要比较模式(不是数据),并且可以访问Perl,mysqldiff可能会起作用。 我已经使用它,因为它可以让你比较本地数据库和远程数据库(通过SSH),所以你不需要打乱任何数据。

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

它会尝试生成SQL查询来同步两个数据库,但我不相信它(或者实际上是任何工具)。 据我所知,没有100%可靠的方法来反向设计将一个数据库模式转换为另一个数据库模式所需的更改,特别是在进行了多项更改时。

例如,如果只更改列的类型,自动工具可轻松猜测如何重新创建该列。 但是,如果您也移动列,重新命名并添加或删除其他列,那么最好的软件包可以做的就是猜测可能发生的事情。 你最终可能会丢失数据。

我建议跟踪您对开发服务器所做的任何模式更改,然后在实时服务器上手动运行这些语句(或将它们转换为升级脚本或迁移)。 这更乏味,但它会保证你的数据安全。 当你开始允许最终用户访问你的网站时,你是否真的会对数据库进行持续不断的变化?


对于我自己,我会开始倾销这两个数据库并区分转储,但如果您想自动生成合并脚本,则需要获得一个真正的工具。

简单的Google搜索提供了以下工具:


当然有很多方法,但在我的情况下,我更喜欢dump和diff命令。 所以这里是一个基于Jared评论的脚本:

#!/bin/sh

echo "Usage: dbdiff [user1:[email protected]] [user2:[email protected]] [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

反馈是欢迎:)


我使用一个名为Navicat的软件来:

  • 将Live数据库同步到我的测试数据库。
  • 显示两个数据库之间的差异。

它花钱,只有Windows和Mac,它有一个糟糕的用户界面,但我喜欢它。


我认为Navicat for MySQL将对这种情况有所帮助。 它支持MySQL的数据和结构同步。


有一个用perl叫做Maatkit的有用工具。 它有几个数据库比较和同步工具等等。


看看dbForge Data Compare for MySQL 。 这是一个共享软件,有30天的免费试用期。 这是一个快速的MySQL GUI工具,用于数据比较和同步,管理数据差异以及可定制的同步。








diff