误删数据怎么办?

今天我要和你讨论的是一个沉重的话题:误删数据。

在前面几篇文章中,我们介绍了 MySQL 的高可用架构。当然,传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table 命令,会通过 binlog 传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。

虽然我们之前遇到的大多数的数据被删,都是运维同学或者 DBA 背锅的。但实际上,只要有数据操作权限的同学,都有可能踩到误删数据这条线。

今天我们就来聊聊误删数据前后,我们可以做些什么,减少误删数据的风险,和由误删数据带来的损失。

为了找到解决误删数据的更高效的方法,我们需要先对和 MySQL 相关的误删数据,做下分类:

1、使用 delete 语句误删数据行;
2、使用 drop table 或者 truncate table 语句误删数据表;
3、使用 drop database 语句误删数据库;
4、使用 rm 命令误删整个 MySQL 实例。

误删行

在前面文章中,我们提到如果是使用 delete 语句误删了数据行,可以用 Flashback 工具通过闪回把数据恢复回来。

Flashback 恢复数据的原理,是修改 binlog 的内容,拿回原库重放。而能够使用这个方案的前提是,需要确保 binlog_format=row 和 binlog_row_image=FULL。

具体恢复数据时,对单个事务做如下处理:

1、对于 insert 语句,对应的 binlog event 类型是 Write_rows event,把它改成 Delete_rows event 即可&

猜你喜欢

转载自blog.csdn.net/yzh_2017/article/details/128691884
今日推荐