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

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

一、恢复数据的方法

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 条件里面没有包含索引字段的话,这条语句的执行就会报错。

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

相关推荐
Flying pigs~~14 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
misL NITL14 小时前
mysql之如何获知版本
数据库·mysql
许彰午15 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
2401_8323655215 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
2301_7796224116 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
2301_7662834416 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
北极的冰箱16 小时前
MySQL Ver 8.0.41 for macos14.7密码遗忘
数据库·mysql
XDH_CS17 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
treacle田17 小时前
达梦数据库-统计信息收集-记录
数据库·达梦数据库统计信息收集
审判长烧鸡18 小时前
PostgreSQL之索引/函数/触发器
数据库·postgresql·触发器·函数·索引