2017-03-07 15 views
3

2つの大きなSQLファイルがそれぞれ約8GBあります。しかし、最新のバックアップでは、1つのファイルに300MBのデータがないことがわかりました。2つの大きなsqlファイルを比較して、データを回復する相違点を見つけよう。

欠落しているデータを比較したいので、一時的なデータか重要なデータが消滅したかどうかを確認できます。

Ubuntu 14.04でdiffを使用して両方のファイルを比較すると、常にメモリ割り当てエラーが発生します。私はまた、メモリソリューション以上のものを許している他の試みをしましたが、それでもなお役に立たない。

sql1に存在するがsql2にないすべてのデータを新しいファイルsql3に集めたいとします。

助けてください!

EDIT:最近、シンプルなMySQl-ServerからPercona XtraDB Clusterに移行しました。プロセス内で多くのテーブルがMyISAMからINNODBに変換されました。だから、それはmysqldump SQLファイルの300MBの減少の理由ですか?私は真剣にこれはSQLはSQLになりますが、INNODB SQLコードはどのような場合に減少するのだろうか?これに関する専門家の助言が役に立ちます。

+0

は1つのテーブルまたは複数のテーブルからのものです – sumit

+0

@sumitそのすべてのデータベース。しかし、私はそれは問題ではないと思う、私はちょうど2番目のSQLファイルから行が欠落しているが、最初のSQLファイルに存在して見てみたい。 – rsharpy

+0

Red-Gate SQL Compareはこれを実現する素晴らしいツールです。 http://www.red-gate.com/products/mysql/mysql-compare/ – vanloc

答えて

0

大量のデータを処理する場合、SQLダンプの比較は非常に難しいです。私は、次のことをしようとするだろう:独自のデータベースに

  1. インポート各SQLファイルデータ
  2. 使用方法の一つ(私はスキーマが同じであると仮定)データベースの内容を比較するhereを示しました。例えば。データ操作は、データベースに格納されているときにはるかに高速であり、また、失われたデータを簡単に使用することができるという利点を有するように比較のToad for MySql

このように、高速でなければなりません。例えば。

SELECT * 
FROM db1.sometable 
WHERE NOT EXISTS (SELECT 1 
        FROM db2.sometable 
        WHERE db1.sometable.pkcol = db2.sometable.pk2) 

は、正確な欠落情報を便利な方法で返します。

+0

あなたの解決策は私がすでに試したdiffを示唆しています。ファイルが非常に大きく、十分なメモリがないためにメモリ割り当てエラーが発生しています。私は153のデータベースを持っていますが、私は1で1を比較することはできません。 – rsharpy

+0

@rsharpy - いいえ、最初の答えをスキップします。下記から[th​​is](http://stackoverflow.com/a/225790/2780791)またはその他をお試しください。言及したように、最初に、独自のデータベース内の各SQLからデータを取得し、データベースレベルで比較を実行する必要があります。データをダンプするのは難しいです。 – Alexei

+0

@Alexeiありがとうございました。最初に両方のSQLファイルをサーバーにインポートして、各データベースを他のバージョンと比較すると、時間がかかります。しかし、2つのsqlファイルから1行の差分レポートを素早く知ることができれば、何が欠落しているかをすぐに理解することができます。 – rsharpy

関連する問題