暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
误删数据后除了跑路还能怎么办?.pdf
285
17页
3次
2023-02-18
10墨值下载
31 | 误删数据后除了跑路,还能怎么办?
2019-01-23 林晓
今天我要和你讨论的是一个沉重的话题:误删数据
在前面几篇文章中,我们介绍了MySQL的高可用架构。当然,传统的高可用架构是不能预防误
删数据的,因为主库的一drop table命令,会通过binlog传给所有从库和级联从库,进而导致整
个集群的实例都会执行这个命令
虽然我们之前遇到的大多数的数据被删,都是运维同学或者DBA锅的。但实际上,只要有
据操作权限的同学,都有可能踩到误删数据这条线
今天我们就来聊聊误删数据前后,我们可以做些什么,减少误删数据的风险,和由误删数据带
的损失
为了找到解决误删数据的更高效的方法,我们需要先对和MySQL相关的误删数据,做下分类:
1. 使用delete句误删数据行;
2. 使用drop table或者truncate table语句误删数据表;
3. 使用drop database语句误删数据库
4. 使用rm命令误删整MySQL实例
heipao8.com Ê×·¢½Ì³ÌÍø
24篇文中,我们提到如果是使用delete语句误删了数据行,可以用Flashback工具通过闪
回把数据恢复回来。
Flashback复数据的原理,是修改binlog的内容,拿回原库重放。而能够使用这个方案的前提
是,需要确保binlog_format=row binlog_row_image=FULL
具体恢复数据时,对单个事务做如下处理
1. 对于insert句,对应binlog event类型Write_rows event把它改成Delete_rows event
即可;
2. 同理,对于delete语句,也是Delete_rows eventWrite_rows event
3. 而如果是Update_rows的话,binlog里面记录了数据行修改前和修改后的值,对调这两行的
位置即可。
如果误操作不是一个,而是多个,会怎么样呢?比如下面三个事务:
现在要把数据库恢复回这三个事务操作之前的状态,用Flashback工具解binlog,写回主库
的命令是:
也就是说,如果误删数据涉及到了多个事务的话,需要将事务的顺序调过来再执行。
恢复数据比较安全的做法,是恢复出一个备份,或者找一个从库作为临时库,在这个临时库上
行这些操作,然后再将确认过的临时库的数据,恢复回主库
为什么要这么做呢?
这是因为,一个在执行线上逻辑的主库,数据状态的变更往往是有关联的。可能由于发现数据
题的时间晚了一点儿,就导致已经在之前误操作的基础上,业务代码逻辑又继续修改了其他数
据。所以,如果这时候单独恢复这几行数据,而又未经确认的话,就可能会出现对数据的二次
(A)delete ...
(B)insert ...
(C)update ...
(reverse C)update ...
(reverse B)delete ...
(reverse A)insert ...
heipao8.com Ê×·¢½Ì³ÌÍø
of 17
10墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜