2017-03-07 30 views
3

我有2個大約8GB的大型SQL文件。但是,在最新的備份中,我發現一個文件缺少300MB的數據。比較2個大的sql文件,並找到差異來恢復數據

我只想比較哪些數據丟失,以便我可以檢查它只是臨時數據或已消失的重要數據。

在Ubuntu 14.04上通過比較比較這兩個文件,我總是得到內存分配錯誤。我也嘗試了其他方式,不僅僅是內存解決方案,還有其他所有方面,但仍然沒有幫助。

我想收集存在於sql1但在sql2中丟失的所有數據到新文件sql3。

請幫忙!

編輯:我最近從簡單的MySQl-服務器移動到Percona XtraDB集羣,很多表從MyISAM轉換到INNODB在過程中。那麼,這是否會成爲mysqldump SQL文件減少300MB的原因?我嚴重懷疑這是因爲SQL將是一個SQL,但INNODB SQL代碼在任何情況下都會減少嗎?有關這方面的專家建議將有所幫助。

+0

它來自一個表還是多個表 – sumit

+0

@sumit它的所有數據庫。但是,我認爲這並不重要,我只想看看哪些行從第二個sql文件丟失,但是存在於第一個sql文件中。 – rsharpy

+0

紅門SQL比較是一個偉大的工具,將爲你做到這一點。 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

你的解決方案建議差異,我已經嘗試過,我得到內存分配錯誤,因爲文件非常大,我沒有足夠的內存。我有153個數據庫,我無法比較1。1 – rsharpy

+0

@rsharpy - 不,跳過第一個答案。嘗試[這](http://stackoverflow.com/a/225790/2780791)或從下面的其他。正如所想到的那樣,首先應該從每個SQL的數據庫中獲取數據,並在數據庫級別進行比較。轉儲數據很難操作。 – Alexei

+0

@Alexei謝謝你的朋友。如果我要首先將兩個SQL文件導入服務器,然後將每個數據庫與其他版本進行比較,則需要花費我很多時間。但是,如果我只是從2個sql文件中獲得每行快速差異報告,我將很快理解錯過了什麼。 – rsharpy

相關問題