上一篇文章关于MySQL binlog二进制日志中,对binlog是什么,日志结构,如何查看等进行了介绍,本文介绍如何将使用binlog进行数据恢复。
清空binlog
清空binlog,便于后续测试:
reset master
数据写入
对数据库进行更新操作:
mysql > create database test;
mysql > use test;
mysql > create table test001(id int,name varchar(10));
mysql > insert into test001 values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
以上这些操作会记录到mysql-bin.000001文件中。
接着,执行flush logs
,强制重新创建一个binlog文件。
mysql > flush logs;
模拟误删除操作
继续执行SQL进行数据变更操作:
mysql > delete from test001 where id=4; //模拟误操作,删除数据
mysql > create table test002(id int,name varchar(10));
mysql > insert into test002 values(101,'A'),(102,'B'),(103,'C'),(104,'D'),(105,'E');
以上操作会记录到mysql-bin.000002文件中。
查看日志文件
>show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 1088 |
| mysql-bin.000002 | 899 |
+------------------+-----------+
1 row in set (0.01 sec)
数据恢复
查找delete事件所在位置
查看binlog文件,从中找到delete语句所在的位置。
# mysqlbinlog -v mysql-bin.000002
假设delete事件开始position是287,事件结束position是413。
恢复数据
提取sql
从binlog中提取sql操作,需要跳过故障点:
mysqlbinlog /var/lib/mysql/mysql-bin.000001 > mysql-bin.sql
mysqlbinlog /var/lib/mysql/mysql-bin.000002 --stop-position=287 > 287.sql
mysqlbinlog /var/lib/mysql/mysql-bin.000002 --sart-position=413 > 413.sql
删除test数据库
mysql > drop database test;
使用binlog恢复数据
使用日志进行恢复时,需要依次进行,即最早生成的日志文件要最先恢复。
mysql -uroot -p123456 < mysql-bin.sql
mysql -uroot -p123456 < 287.sql
mysql -uroot -p123456 < 413.sql
到此,数据恢复完成。
Just try, don't shy.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现