MySQLダンプファイルが2つあります。 2つのテーブル間のテーブルデータの違いを見つけたい。
DIFFツールを使用します-ここにいくつかのグラフィカルなツールがあります(どちらも無料です):
「--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というツールを試してみることができるかもしれません。私はまだ試していませんが、しばらくの間リストに載っています。
これが私が使っているものです。できます。
#!/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つのmysqldiffを比較するには、特定の方法で行う必要があります。そのため、順序は定義された方法で行われ、関連のないデータは省略されます。
これは、ある時点ではmysqldump
では完全には不可能でしたが、その間に変更されたかどうかはわかりません。
この仕事に適したツールの1つは、pydumpy
https://code.google.com/p/pydumpy/ (mirror: https://github.com/miebach/pydumpy )
質問のように古いダンプと比較したい場合は、最初にダンプから一時データベースを作成してから、そこから開始することができます。
これは私にとって非常に便利だったので、2セントを追加します。
git diff --Word-diff=color dump1.sql dump2.sql | less -R