网站首页 > 文章精选 正文
我们知道传统的高可用架构是不能预防误删数据的,因为主库的一个drop table命令,会通过 binlog 传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。虽然大多数的数据被删案例,都是运维或者DBA 背锅的。但实际上,只要有数据操作权限的同学,都有可能踩到误删数据这条线。
那么在误删数据前后,我们可以做些什么来减少误删数据带来的风险和损失。
为了能够快速应对,我们需要对MySQL误删数据进行简单的分类:
- 使用 delete 语句误删数据行;
- 使用 drop table 或者 truncate table 语句误删数据表;
- 使用 drop database 语句误删数据库;
- 使用 rm 命令误删整个 MySQL 实例。
使用 delete 语句误删了数据行:可以用 Flashback 工具通过闪回把数据恢复回来。使用该工具的前提是 binlog_format=row 和 binlog_row_image=FULL。闪回的原理是对binlog进行修改,然后回放。
使用 drop table 或者 truncate table 语句误删数据表:这种情况下想要恢复数据,就需要使用全量备份 + 增量binlog日志。该方案需要有定期全量备份,并有备份完成后drop或truncate命令执行期间的所有binlog。所以说备份大于一切,生产环境一定要备份。
使用 drop database 语句误删数据库:同样需要通过全量备份来恢复数据,并利用binlog来恢复增量数据。还有一种方案就是搭建延迟同步库,通过 CHANGE MASTER TO MASTER_DELAY = N 命令,可以指定这个备库持续保持跟主库有 N 秒的延迟,然后利用这个时间差来恢复数据,或者直接中断同步,手动追主库数据到drop前,再将业务流量直接写入延迟库。
使用 rm 命令误删整个 MySQL 实例:rm删除实例这种该情况,就算是拿全量备份恢复也还是会丢失备份时刻到执行rm命令期间的增量数据。最好的解决方案就是有一套高可用架构,业务直接切到另一个节点,故障节点重做恢复后再加入到集群中。
上面说了那么多,有什么好用的工具呢?
这里强烈推荐my2sql,该工具可针对表级别的delete,update快速恢复数据,可过滤时间,点位,操作类型,具体的表等生产正常的SQL以及回滚SQL。
当然,在有应对预案的同时,如何才能防范于未然,提前预防呢?
那就是权限控制,严格控制账号的权限,遵循最小权限原则。有条件的可以研发堡垒,二次审批确认,或者命令改写等。
猜你喜欢
- 2025-07-28 【MySQL】详解 MySQL 三种日志 ( binlog、redo log 和 undo log ) 及其作用
- 2025-07-28 Rust的数据库框架:SQLx连接MySQL实践
- 2025-07-28 SpringCloud专题 - 分布式事务Seata详解
- 2025-07-28 分库分表后,数据库数据一致性问题如何解决?这操作真的可以
- 2025-07-28 数据库(DBMS)面试题(数据库面试题2020)
- 2025-07-28 支付宝一面:多线程事务怎么回滚?用 @Transactional可以回去了!
- 2025-07-28 什么是实时数据同步?纯干货解读!(什么是实时数据传输)
- 2025-07-28 什么是 SQL 事务,如何创建 SQL 事务
- 2025-07-28 数据库事务类型说明(数据库事务的分类)
- 2025-07-28 Spring Boot 常用注解全解析:20 个高频注解
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)