mysql通过binlog日志还原数据

前段时间由于客户电脑上的mysql数据丢失了,所以就研究了mysql通过binlog日志恢复数据,但是百度了好多感觉都不能一次性解决问题,或者是我没弄明白,最终研究了好久终于恢复成功,其实挺简单的,但是有几个前提条件,还有提醒一下,如果发现数据丢失了最好就不要启动什么系统了,就是最好把连接这个mysql的所有系统都切断:

1、查看安装的mysql是否开启binlog日志功能,并且是row模式;

show variables like 'log_bin%';

这个表示是开启binlog日志功能的;

show variables like 'binlog_format';

这个表示是row模式,具体各个模式的区分百度上多的很;

2、这个确定好后,就可以开始了,首先查出日志文件的存储目录,一般和数据的存储目录是一样的,其实第一张图里面有,

具体的根据自己的安装位置查看就行,注意:目录只导data就行,你直接复制到资源管理器是会错的;

3、我的文件的名字可能和你的不一样,这个不影响的,你只要找到这些日志文件就行,不要想着打开它,这个是二进制的;

4、查看这些日志里面记录的操作,或许就有你勿删除或者其他的操作;

show binlog events in 'binlog.000143'

这个是你需要提前查询出每个勿操作执行的其实位置和结束位置,这个只能在丢失数据的这个mysql上查看,拷贝的日志文件好像是查询会出错,但是具体的还原日志文件你就可以随便拷贝在安装有mysql的电脑上都行;

下一步就是要进行还原了;

5、首先cmd到我们安装mysql的bin目录

我这个是一个cmd工具,还是好用的,推荐一下,叫cmder,可以百度一下,你们也可以不用管,然后可以把我们需要恢复的日志文件复制到这个目录,到时候执行命令就不用指定目录了,不用全部复制,你只需要用第4步找到你确定是勿操作的那个log文件后,拷贝这个文件就行;

6、mysqlbinlog --start-position=234(就是第4步查出的开始位置) --stop-position=637(就是第4步查出的结束位置) --base64-output=decode-rows -vv binlog.000114(这个就是你的日志文件名,应为在当前目录,所以不用指定路径,否则需要指定一下路径) > all1.sql(这个是最后输出的操作时的sql);

最后就生成了想这样的东西,现在你应该高兴了吧,数据回来了,接下来就是把delete替换成insert就可以还原回去了;

7、我这点是用的linux的命令去替换的

cat all3.sql(生成的sql) | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@51.*),/\1;/g' | sed 's/@[1-9][0-9]=//g' | sed 's/@[1-9]=//g'>ryxx.sql(最后输出的sql)

到此就完成了。欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值