假如不小心把数据库删了,请问应该怎么把数据恢复出来?

如果因为某些原因误删误删数据或者数据库,需要面对如何快速恢复问题。关于这个问题的解决总结如下:

一、恢复数据的方法

1. 误删数据表或数据库:

使用 `DROP TABLE`、`TRUNCATE TABLE` 或 `DROP DATABASE` 误删数据时,binlog 记录的是 statement 格式,可能不能通过 binlog 恢复。

恢复方法:依赖全量备份和增量日志。这个需要定期的全量备份和实时备份的 binlog。

2. 误删数据行:

使用 `DELETE` 语句误删数据行,可以通过 Flashback或者美团闪回工具Myflash进行恢复数据。

美团Myflash详细介绍:https://github.com/Meituan-Dianping/MyFlash。

二、提升数据恢复效率:

MySQL 5.6 之后引入了延迟复制的备库,防止错误操作快速蔓延到从库,导致主从数据都被删除。

具体方法: 通过命令 CHANGE MASTER TO MASTER_DELAY = N ,可以指定这个备库持续保持跟主库有 N 秒的延迟。这样可以缩短了整个数据恢复需要的时间,提高恢复数据的效率。

三、预防数据误删的方法

规范数据库脚本审计以及脚本发布上线的流程,出现问题能够及时撤销和回退。

数据库账号权限的管理,特别是Drop/Truncate权限必须严格管理。

数据库配置层面也需要做好约束规范,sql_safe_updates 参数设置为 on。 delete 或者 update 语句中没有 where 条件,或者 where 条件里面没有包含索引字段的话,这条语句的执行就会报错。

为了防止集群集体删除的极端情况,我们做数据库备份的时候有条件尽量选择跨机房或者跨城市都可以,提高数据库可用性,降低数据丢失的损失。

相关推荐
一 乐8 小时前
家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·家政服务管理系统
努力成为AK大王10 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
En^_^Joy11 小时前
Django开发:模板系统入门指南
数据库·django·sqlite
无关868812 小时前
Redis Bitmaps 用户签到系统设计方案
数据库·redis·缓存
江华森12 小时前
FastAPI 极速开发指南 — 从零到生产级 API 实战
数据库·fastapi
老纪13 小时前
Redis分布式锁进第九零篇
数据库·redis·分布式
haven-85213 小时前
MySQL事务ACID、隔离级别、MVCC、幻读解决
数据库·mysql
小高学习java13 小时前
事务的边界问题,如何判断数据回滚时机。
java·数据库·后端
迷枫71214 小时前
【无标题】
数据库