mysql怎么备份还原单张数据表的部分数据(转)

项目采用java的SSH系统,hibernate,现在备份还原用的是cmd指令,mysqldump导出
现在想备份一张MyISAM引擎的设备状态表,数据很多,1个月3000W条左右,想备份部分数据,比如昨天一天的数据
mysqldump -uroot -p123456 -t 数据库 数据表 --where "条件" > 目录
这句导出后是先drop索引,再insert,再添加索引
但是insert的时候会报错,id冲突,导不进去。
我设想的是在drop索引后delete相关的数据,再insert,或者直接把insert改为replace等,这样就不会冲突了
不知道具体怎么实施,百度也找不到mysql导出自定义功能的命令,求高手。。
 
� 我来答  举报
 
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到原表。
原文地址:https://www.cnblogs.com/xihong2014/p/15353563.html