MySQL基于ROW格式的数据恢复

  参考:http://www.cnblogs.com/xuanzhi201111/p/5284084.html

  MySQL的bin log日志有三种模式Statement、Row、Mixd,Row记录是行的修改情况建议生产环境使用Row格式,记录的是行数据的修改情况,不是原始SQL,万一误操作删除或者更新后又想恢复,把binlog解析出来生产反向的原始SQL

  使用脚本binlog-rollback.pl

  该脚本只能反向DML语句及对表的增删修改(insert/delete/update)操作

  查看日志格式,必须为row格式

1
show variables like "binlog_format";

show variables like "binlog_format";

  运行脚本不加参数会显示脚本帮助

  -f自定binlog日志文件

  -o输出反向后的sql语句

  -u用户名

  -p密码

  -i忽略DDL语句

  -d指定库名

   -T指定表名

  --start-position --stop-position指定读取的POS开始及结束位置

  

  数据库新建一个库test及库下的表test用于测试

1
2
3
create database test;
use table
create table test(id int)

  查看bin log文件及POS位置值

  往表test里面插入一条数据

1
insert into test values(1);

  反向解析

1
perl binlog-rollback.pl -f 'mysql-bin.002611' -o '/tmp/t.sql' -u 'root' -p '123456' -i

  查看解析出来的反向语句

1
2
cat /tmp/t.sql
DELETE FROM `test`.`test` WHERE `id`=1;

  插入数据的反向是删除,把该sql导入mysql则可以把刚刚的操作取消

  模拟误操作把该条数据删除

1
delete from test.test where id=1;

  查看已经没有该数据了

  反向解析,删除的反向就是插入,把该语句导入mysql即可

1
mysql -uroot -p123456 -h127.0.0.1 </tmp/t.sql

   查看数据回来了

 

  模拟修改后的恢复

  修改数据

1
update test.test set id=2 where id =1 ;

   查看

  反向修改错了反向后的语句如下

  导入即可恢复

posted @   minseo  阅读(1107)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2018-01-17 Python全栈day20(装饰器基本理论)
点击右上角即可分享
微信分享提示