MySQL误删数据后,查找操作日志并恢复数据

有时候直接操作数据库,可能会出现误删除一些数据的情况,比如删了某个表中某一行数据,事后发现该条数据是误删的,还需要恢复,但是又不太记得具体每个字段原来的数据是什么了,只能要查到之前删掉的数据每个字段值都是什么,才能恢复数据,这时候,就需要查找操作日志,找到之前做的删除操作,把数据重新恢复。

找到日志文件

1. 首先,要找到mysql的日志文件存放在服务器的哪个路径。可以用以下命令来找到日志所在:

 截取指定时间段的log

2. 去数据库所在服务器,找到所在时间段的log(误删数据的那个时间段),记住文件路径和名字:

 

 3. 进入到数据库安装路径的bin路径下

 

  4. 使用如下命令,拿出对应时间段的log:

mysqlbinlog --no-defaults --database=XXX --start-datetime="2021-06-22 09:18:00" --stop-datetime="2021-06-22 09:40:00" /data/mysql/binlogs/mysql-bin.000027 | grep jiraissue > jira_opt.txt

上面命令中, --database=XXX 填写自己的库名,grep jiraissue > jira_opt.txt 是做下初步筛查,比如我知道自己是误删除的 jiraissue这个表的数据,就只把这些相关的数据搜出来,放到自定的jira_opt.txt文本文件中。

5. 打开txt文件,根据起止时间,找一个标志点:

导出误操作的SQL

6. 运行如下命令,导出SQL语句:

mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v --start-position=970222536 --stop-position=973499062 --database=jiradb /data/mysql/binlogs/mysql-bin.000027 > restore11.sql

 7. 从导出的SQL语句中,查看自己删除的那条数据

反写SQL

 8. binlog2sql可以将binlog进行反向解析(可自行搜索方法)。

或者数据量不大的话,直接自己反写一下,在SQL执行即可。

 

### 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` 文件作为输入流提交给解释引擎执行。这将重演那些曾经被执行过的增删改查命令从而达到撤销不期望变动的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值