windows恢复下误删MySQL的数据

1、遇到问题

最近在本地开发的时候,一不小心把一个数据表当成废弃表给删掉了,其中有很多比较重要的数据,懊恼的同时想到我开启了binlog日志,依稀记得可以根据这个可以恢复数据,于是开始一顿搜索资料…

2、解决问题

(1)首先确认是否开启binlog,如果开启了就可以此恢复删除的数据

	show VARIABLES like '%log_bin%';

结果如下图所示:
在这里插入图片描述
可以看到log_bin对应的那行为ON,表示已经开启日志记录(日志怎么开启不再赘述)

(2)查看日志,找到删除数据的记录

上图的log_bin_basename对应的地址就是记录日志的位置,我本机的位置是D:\program\mysql\mysql-8.0.17-winx64\data,
在这里插入图片描述
这里有记录所有操作数据库的日志文件,但是这些都是二进制文件,普通文本编辑器是没法查看的,索性MySQL自带查看工具


一、查看最早binlog的日志:
show binlog events;

二、查看指定的binlog日志:
show binlog events in 'binlog.000047';

三、指定查看 binlog.000047 这个文件,从pos点:20开始查起:        
show binlog events in 'binlog.000047' from 20;      

四、指定查看 binlog.000047 这个文件,从pos点:20开始查起,查询10条        
show binlog events in 'binlog.000047' from 20 limit 10;      

五、指定查看 binlog.000047 这个文件,从pos点:20开始查起,偏移5行,查询10条        
show binlog events in 'binlog.000047' from 20 limit 5,10;

在sql后面加上“\G”,不会显示详情,便于查找操作的节点,每一小块都是一个操作,server_id 记录是在哪台机器上操作的,
event_type 记录操作类型,如下图:
在这里插入图片描述
由于写这篇文章的时候,已经放弃处理那部分日志以及恢复那部分数据了(主要没有设置单个日志大小,导致日志文件太大,已经达到GB级别,普通文本编辑器已经打不开了,chrome浏览器异步加载文件比较好,可以查看一部分信息,但最终会崩溃,可能是内存问题没有继续深入,想到过文件分割,但没有尝试),这里仅模拟当时的操作

(3)日志导出sql

到日志所在的位置,执行以下命令,成功导出到d盘

mysqlbinlog --nodefaults binlog.000048 > d:/my.sql 

在这里插入图片描述
在这里插入图片描述

注意查看下大小,如果命令报错也可能生成空脚本

(4)恢复数据

新开一个cmd窗口,然后执行以下命令

mysql -uroot -p -v plist < my.sql // plist是数据库名,需要和脚本中操作的数据库名一致

至此,成功恢复数据。

### Windows 环境下 MySQL 误删数据恢复方法 在 Windows 环境下,当遇到 MySQL 中的数据被意外删除的情况时,可以通过启用二进制日志 (binlog) 来尝试恢复丢失的数据。此过程涉及定位并解析 binlog 文件中的事务记录,从中提取出可以用于回滚操作的日志条目。 #### 启用 Binlog 功能 如果服务器尚未开启 binlog 日志功能,则无法通过这种方式进行历史数据的还原工作。对于已经启用了该特性的实例来说,在配置文件 `my.ini` 或者 `my.cnf` 中应当存在如下所示的相关设定: ```ini [mysqld] server-id = 1 log_bin = C:/ProgramData/MySQL/MySQL Server 8.0/Data/mysql-bin.log expire_logs_days= 7 max_binlog_size = 100M ``` 上述配置项指定了 binlog 的存储位置以及一些基本参数[^2]。 #### 查找合适的 Binlog 文件 由于每次启动服务都会创建新的 binlog 文件,并按照顺序编号命名(例如:`mysql-bin.000001`, `mysql-bin.000002`),因此需要确认发生误操作前后的时间戳来确定具体要处理哪个或哪些文件。通常可以在默认安装路径下的 Data 目录里找到这些文件列表[^4]。 #### 解析 Binlog 并导出 SQL 脚本 利用命令行工具 `mysqlbinlog.exe` 可以读取指定时间段内的变更事件并将它们转换成可执行语句的形式保存到外部文件中。假设已知确切的发生事故时刻范围为 `"2023-XX-XX XX:XX:XX"` 到 `"2023-YY-YY YY:YY:YY"` ,那么可以根据实际情况调整下面这条指令里的日期部分来进行相应操作: ```bash mysqlbinlog --base64-output=decode-rows -v --database=testdb \ --start-datetime="2023-XX-XX XX:XX:XX" --stop-datetime="2023-YY-YY YY:YY:YY" \ "C:\ProgramData\MySQL\MySQL Server 8.0\Data\hostname-bin.######" > D:\recovery_script.sql ``` 这段脚本会把符合条件的所有更改动作都写入名为 `D:\recovery_script.sql` 的文本文件内等待后续分析和应用。 #### 执行恢复操作前准备 为了防止再次触发相同类型的错误,在正式实施任何补救措施之前建议先暂停应用程序对数据库的一切写入请求。另外还需要确保当前版本的服务端软件支持所使用的备份策略;必要情况下考虑升级至更稳定的发行版[^3]。 #### 应用生成好的 SQL 脚本来修复损坏的数据集 最后一步便是连接上目标库并通过源码管理器或者其他图形界面客户端加载刚刚制作完成的那个 `.sql` 文件作为输入流提交给解释引擎执行。这将重演那些曾经被执行过的增删改查命令从而达到撤销不期望变动的效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值