2016-06-28 57 views
1

我有數據庫名爲「測試」。現在我必須將新舊轉儲文件中的數據從舊+新數據恢復到「測試」數據庫。我只想將新數據恢復到數據庫(不復制舊數據)。如何恢復差異mysql轉儲

嘗試採取表的一部分的備份,然後還原它(How to use mysqldump for a portion of a table?),但我以前不奏效,是因爲喜歡號列在我的表(對於行計數主鍵)

我的表結構是這樣的,

A    | B   | C  | D  | E  | 
+---------------+------------+---------+-------+---------+ 
| 1432550740000 |  111004 | 10000 |  2 | 9690001 | 
| 1432550790000 |  123001 | 10000 |  2 | 9690001 | 
| 1432550340000 | 44440215 | 10000 |  2 | 9690001 | 
| 1432550450000 | 125400054 | 10000 |  2 | 9690001 | 
| 1432551444000 | 43459067 | 10000 |  2 | 9690001 | 
+---------------+------------+---------+-------+---------+ 

任何人都可以請引導我與此?

+0

您如何決定要備份哪些數據?你不需要一個id字段來寫查詢,任何有效的sql提供你期望的結果集都應該做到這一點(如果你可以使用'SELECT .. INTO OUTFILE ..')。 – Philipp

+0

@Philipp我會根據舊錶的行數決定。例如,如果舊錶包含X行意味着新的轉儲將具有X + Y行。在那我想恢復Y行。 – Vidya

+0

因此,只有新數據才能創建轉儲已經太晚了? – Philipp

回答

0

您可以通過創建一個新表(與舊的表相同的結構)稍微繞行一次,並將舊數據和新數據的數據轉儲到這個表中。

然後您可以刪除其他表中已存在的新數據中的行。 (理想情況下,你在你的數據,以確定新的價值觀的東西,但它也將有限制,如果你寫自己的查詢工作)

DELETE FROM newTable WHERE `identifier` IN (SELECT `identifier` FROM oldTable); 
DELETE FROM newTable LIMIT 12; -- deletes first 12 entries 

現在你只在新表中有新的數據。然後可以截斷舊錶並將新數據插入舊錶。

然後你可以截斷,清空或刪除newTable,你不再需要它了。

+0

1.刪除基於標識符的數據: 這將給只有新的數據表..它有用,如果我有至少一個唯一列:/(沒有獨特的列在我的)..... 2.deleting使用限制: 從新表中刪除舊錶計數記錄聽起來不錯。但我不能使用這個作爲解決方案,爲什麼,因爲如果舊錶數據也改變意味着我可能刪除使用此新數據(機會在那裏).... 最後我得到解決方案,如果我使用同一個數據庫中的新轉儲文件恢復數據「測試」舊錶本身(不重複)中的X + Y記錄...... 非常感謝您的指導。 – Vidya