• 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到原表。
  • 相关阅读:
    管理者的存在 说明了企业文化的匮乏【20140124】
    Sublime Text2(ST2)点滴积累及使用技巧_持续更新【20130320】【最近修改20130516】
    WebStorm 点滴积累及使用技巧_持续更新【20130323】【最近修改20130604】
    码农,企业,和资本
    关于赛车游戏的一点体会
    从艺感悟
    三种糟糕的程序员
    关于ios单机盗版
    汽车加速性,功率和扭矩
    ExtJS之面向对象的概念
  • 原文地址:https://www.cnblogs.com/xihong2014/p/15353563.html
Copyright © 2020-2023  润新知