ホームページ > データベース > mysql チュートリアル > update忘加where条件误操作恢复过程演示

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

WBOY
リリース: 2016-06-07 17:41:08
オリジナル
1810 人が閲覧しました

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 までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート