当前位置: 代码网 > it编程>数据库>Mysql > MySQL通过日志恢复数据的操作步骤

MySQL通过日志恢复数据的操作步骤

2024年12月26日 Mysql 我要评论
试验环境:windows server2012 r2、mysql-8.0.27-winx64。1、先检查mysql有没有开启binlog日志通过下面的sql命令查看mysql是否开启日志以及日志文件的

试验环境:windows server2012 r2、mysql-8.0.27-winx64。

1、先检查mysql有没有开启binlog日志

通过下面的sql命令查看mysql是否开启日志以及日志文件的位置:

show variables like '%log_bin%'

执行结果如下图所示:

图中,log_bin的值为“on”表示mysql开启了binlog日志功能;log_bin_basename表示日志文件的位置及文件名。 如果log_bin的值为“off”,那么意味着我们无法通过日志恢复被删除的数据,下面的步骤也就不用继续啦。

2、查找删除操作对应的日志文件

由上图可以看出,日志文件放在mysql安装目录的data目录下,且文件名为binlog。通过windows资源管理器打开mysql的data目录,如下图所示:

由图中我们可以看到两个名为binlog的文件,通过修改日期可以区分哪一个是我们要找的文件,这里假设我们的删除操作包含在日志文件binlog.000025中。 

3、查看被删除数据的日志位置

通过下面的sql命令查看对应的日志文件:

show binlog events in 'binlog.000025'

从查询结果中找到删除命令的开始位置(pos):

如上图所示,pos=598431915对应了删除命令,但数据库执行删除操作时,都是以事务的形式开始的,所以需要将开始位置设定为pos=598431671。继续向下查找,可以找到最后一条删除命令的位置pos=613559555。

4、导出删除操作对应的sql数据

 打开windows命令行工具,将目录切换到mysql安装目录的bin目录下,执行下面的命令:

mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-position=598431671 --stop-position=613559555 --database=【你的数据库名称】 ..\data\binlog.000025 > restore.sql

命令执行完成后,就会将被删除的数据信息导出到名为“restore.sql”的文件中,打开该文件,就可以看到被删除数据的具体信息,如下图所示:

 显然,这不是我们想要的。不要着急,文件中前面这一堆是日志的头部信息,我们可以通过查找关键字“flags: stmt_end_f”的方式,直接定位到我们想要的数据,如下图所示:

现在我们看到了,文件中“### delete from”开始的代码块记录了删除的数据,where之后的每一行记录了所删除数据对应字段(@k表示第k个字段)的值,我们就可以据此写出对应的insert语句来恢复数据。假设表名为table_deleted,则上图中对应的用于恢复数据的sql语句就可以写成:

insert into table_deleted values(527182,15134443,0,0,'2024-12-18 11:19:18', null);

如果文件中记录了多条删除记录,我们就需要逐一写出对应的insert语句。

5、执行sql,恢复被删除的数据

执行这些insert语句,就可以完成数据恢复了。 

以上就是mysql通过日志恢复数据的操作步骤的详细内容,更多关于mysql日志恢复数据的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com