> 데이터 베이스 > MySQL 튜토리얼 > update忘加where条件误操作恢复过程演示

update忘加where条件误操作恢复过程演示

WBOY
풀어 주다: 2016-06-07 17:41:08
원래의
1808명이 탐색했습니다.

update、delete没有带where条件,误操作,如何恢复呢?我现在有一张学生表,我要把小于60更新成不及格。mysqlselect*fromstudent;+----+------+-------+-------+

update、delete没有带where条件,误操作,如何恢复呢?

我现在有一张学生表,我要把小于60更新成不及格。

结果,忘带where条件了,

把整张表的记录都给更新成不及格了。

传统的方法是:利用最近的全量备份+增量binlog备份,网站空间,恢复到误操作之前的状态,那么随着表的记录增大,binlog的增多,恢复起来很费时费力。

现在通过一个简单的方法,可以恢复到误操作之前的状态。

我的binlog日志设置为binlog_format = ROW,如果是STATEMENT,这个方法是无效的。切记!!!

首先,创建一个普通权限的账号(切记不能是SUPER权限),例如:

  • GRANT ALL PRIVILEGES ON yourDB.* TO 'admin_read_only'@'%' IDENTIFIED BY '123456'; 
  • flush privileges; 
  • 把read_only打开,设置数据库只读,

  • Query OK, 0 rows affected (0.01 sec) 
  • 把刚才创建的admin_read_only账号给运维,让运维把前端程序(PHP/JSP/.NET等)的用户名改下,然后重启前端程序(PHP/JSP/.NET等),这样再连接进来的用户对数据库的访问只能读不能写,网站空间,保证恢复的一致性。

    通过binlog先找到那条语句

    然后把那条binlog给导出来

    其中,这些是误操作之前的数据

    这些是误操作之后的数据

    这里,@1/@2/@3/@4对应的表字段是id,name,class,score

    现在,就要进行最后一步的恢复操作了,只需把这些binlog转换成SQL语句,然后将其导入进去。

    再把@1/@2/@3/@4对应的表字段是id,name,class,score,替换掉

  • [root@M1 opt]# sed -i 's/@1/id/g;s/@2/name/g;s/@3/class/g;s/@4/score/g' recover.sql 
  • [root@M1 opt]# sed -i -r 's/(score=.*),/\1/g' recover.sql
    [root@M1 opt]#
    [root@M1 opt]# cat recover.sql
    UPDATE test.student
    SET
    id=1 ,
    ,
    class=1 ,
    score='56'
    WHERE
    id=1 ;
    UPDATE test.student
    SET
    id=2 ,
    ,
    class=1 ,
    score='61'
    WHERE
    id=2 ;
    UPDATE test.student
    SET
    id=3 ,
    ,
    class=2 ,
    score='78'
    WHERE
    id=3 ;
    UPDATE test.student
    SET
    id=4 ,
    ,
    class=2 ,
    score='45'
    WHERE
    id=4 ;
    UPDATE test.student
    SET
    id=5 ,
    ,
    class=3 ,
    score='76'
    WHERE
    id=5 ;
    UPDATE test.student
    SET
    id=6 ,
    ,
    class=3 ,
    score='89'
    WHERE
    id=6 ;
    UPDATE test.student
    SET
    id=7 ,
    ,
    class=4 ,
    score='43'
    WHERE
    id=7 ;
    UPDATE test.student
    SET
    id=8 ,
    ,
    class=4 ,
    score='90'
    WHERE
    id=8 ;
    [root@M1 opt]#
  • OK。最激动人心的一幕到来了,我们进行恢复:

    大功告成!

    你也快动手试试吧!

     

    本文出自 “贺春旸的技术专栏” 博客,网站空间,请务必保留此出处

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿