我如何看待2个MySQL转储之间的差异?

时间:2010-10-01 15:59:50

标签: mysql diff mysqldump

我有2个MySQL转储文件。我想找到2个表之间的表数据差异。

7 个答案:

答案 0 :(得分:7)

使用DIFF工具 - 这里有一些图形工具(两者都是免费的):

答案 1 :(得分:7)

使用“--skip-opt”运行mysqldump以获取2个转储文件,即:

mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb1 > /tmp/dump1.sql

mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb2 > /tmp/dump2.sql

使用这些差异选项进行比较:

diff -y --suppress-common-lines /tmp/dump1 /tmp/dump2

答案 2 :(得分:1)

此工具不可用,因为网站不再有效。

也许你可以给一个名为mysqldiff的工具一个go,我还没有尝试过,但它已经在我的名单上了一段时间。

答案 3 :(得分:1)

为了比较2个mysql差异,他们需要以某种方式完成,以便订单以定义的方式进行,并且不相关的数据被省略。

mysqldump来说,这一点并非完全可能,我不确定在此期间这是否发生了变化。

这项工作的一个好工具是pydumpy https://code.google.com/p/pydumpy/(镜像:https://github.com/miebach/pydumpy

如果要与旧转储进行比较(如问题中所示),您可以先从转储中创建一个临时数据库,然后从那里开始。

答案 4 :(得分:1)

这是我使用的。它有效。


#!/bin/bash
# Do a mysqldump of the a db, once a day or so and diff to the previous day. I want to catch when data has changed
# Use the --extended-insert=false so that each row of data is on a single line, that way the diff catches individual record changes

mv /tmp/dbdump0.sql /tmp/dbdump1.sql 2>/dev/null

mysqldump -h dbhostname.com -P 3306 -u username -p password --complete-insert --extended-insert=false dbname > /tmp/dbdump0.sql

# Ignore everything except data lines
grep "^INSERT" /tmp/dbdump0.sql  > /tmp/dbdump0inserts
grep "^INSERT" /tmp/dbdump1.sql  > /tmp/dbdump1inserts

diff /tmp/dbdump1.sql  /tmp/dbdump0.sql   > /tmp/dbdumpdiffs
r=$?
if [[ 0 != "$r" ]] ; then
    # notifier code remove
fi

答案 5 :(得分:0)

这对我非常有用,因此加两分钱:

git diff --word-diff=color dump1.sql dump2.sql | less -R

答案 6 :(得分:0)

我只需要在 ),( 处添加换行符,以便每条记录成为单独的一行。然后可以将结果提供给 diff 之类的工具。这个命令可以完成这项工作:

FORMAT_="s/),(/),\n(/g" && diff <(sed $FORMAT_ elmos-db-temp.sql) <(sed $FORMAT_ elmos-db-ups.sql)