您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/7/1 8:37:41发布45次查看
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。最激动人心的一幕到来了,我们进行恢复:
大功告成!
你也快动手试试吧!
本文出自 “贺春旸的技术专栏” 博客,网站空间,请务必保留此出处
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product