web-dev-qa-db-ja.com

2つのMySQLダンプの違いを確認するにはどうすればよいですか?

MySQLダンプファイルが2つあります。 2つのテーブル間のテーブルデータの違いを見つけたい。

26
Tree

DIFFツールを使用します-ここにいくつかのグラフィカルなツールがあります(どちらも無料です):

9
OMG Ponies

「--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

このツールは、Webサイトが機能しなくなったため、使用できなくなりました

Mysqldiffというツールを試してみることができるかもしれません。私はまだ試していませんが、しばらくの間リストに載っています。

2
CharlesLeaf

これが私が使っているものです。できます。


#!/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
2
Mike Makuch

2つのmysqldiffを比較するには、特定の方法で行う必要があります。そのため、順序は定義された方法で行われ、関連のないデータは省略されます。

これは、ある時点ではmysqldumpでは完全には不可能でしたが、その間に変更されたかどうかはわかりません。

この仕事に適したツールの1つは、pydumpyhttps://code.google.com/p/pydumpy/ (mirror: https://github.com/miebach/pydumpy

質問のように古いダンプと比較したい場合は、最初にダンプから一時データベースを作成してから、そこから開始することができます。

2
mit

これは私にとって非常に便利だったので、2セントを追加します。

git diff --Word-diff=color dump1.sql dump2.sql | less -R
0
vabada