我有2个MySQL转储文件。我想找到2个表之间的表数据差异。
答案 0 :(得分:7)
答案 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)