1. 程式人生 > 其它 >mysql怎麼備份還原單張資料表的部分資料(轉)

mysql怎麼備份還原單張資料表的部分資料(轉)

專案採用java的SSH系統,hibernate,現在備份還原用的是cmd指令,mysqldump匯出
現在想備份一張MyISAM引擎的裝置狀態表,資料很多,1個月3000W條左右,想備份部分資料,比如昨天一天的資料
mysqldump -uroot -p123456 -t 資料庫 資料表 --where "條件" > 目錄
這句匯出後是先drop索引,再insert,再新增索引
但是insert的時候會報錯,id衝突,導不進去。
我設想的是在drop索引後delete相關的資料,再insert,或者直接把insert改為replace等,這樣就不會衝突了
不知道具體怎麼實施,百度也找不到mysql匯出自定義功能的命令,求高手。。
我來答舉報 1個回答 #熱議#侵犯著作權如何界定? asxsa
2014-11-05·超過12使用者採納過TA的回答 原表裡的資料還存在,如果原表裡還有唯一性索引,沒刪除前肯定匯入不進去的。可以先把備份還原到一個Temp表,再刪除原表主鍵存在於Temp表的資料,再把Temp表Insert到原表。

刪除原表主鍵存在於Temp表的資料示例:
DELETE FROM tab d
WHERE -1 = -1
AND EXISTS (SELECT -1
FROM temp t
WHERE -1 = -1
AND t.key = d.key); 更多追問追答 追問
這個原理的話在匯入前先刪除相關id的資料,再匯入,不就可以了麼,但是這個需要先disable索引,再刪除id,再enable索引。。然後匯入的時候也是一樣,先disable索引,再insertN多資料,再enable索引 。。這樣不是對索引多操作了一次麼,而且隨著資料變大,索引會越來越大,中間會多消耗很多時間的。。我想的是把刪除id這一步直接加在insert前,這樣就只要操作一次索引。。
追答
我說的就三步,不需要你對索引進行操作,先把備份還原到一個Temp表,再刪除原表主鍵存在於Temp表的資料(簡單說就是刪除原表ID重複的資料),再把Temp表Insert到原表。