【Mysql-binlog】binlog恢复数据库 mysql bin-log恢复操作 简易版 除了删库跑路还能这么做

今天测试数据 然后不小心误删数据 当时慌的要死 当时学过mysql的binlog日志 第一时间就想起来binlog日志但是呢 没有实际操作过 也不知道怎么操作 还是很慌 在博客找了一圈有很多 但是遇到很多问题 现在修复完成 特别记录一下 分享给有需要的人

修复过程

1. 在mysql console中输入命令:

show variables  like 'log_bin';

result:

Variable_name

Value

log_bin

ON

  • 结论: 如果是OFF那就G准备拎包走人吧 现在是支持从binlog恢复。
  • 还有一点要知道就是需要binlog记录了你的操作 也就是binlog需要把你的DROP操作已经刷新到binlog里

2. 找到binlog路径

show variables like '%datadir%';

result:

Variable_name

Value

datadir

/var/lib/mysql/

  • 这个路径需要在下面4.3中用到,当然了,如果是docker方式的mysql,那么需要根据docker编排的volumes来获取binlog路径。

3. 查看当前binlog

show master logs;

Log_name

File_size

Encrypted

mysql-bin.000001

278849903

No

  • 确定当前的binlog是mysql-bin.000001

4. 确定mysql-bin.000001中需要恢复的起止位置

4.1. 将mysql-bin.000001中的事件导出到文本文件out.txt

mysql -h <mysql IP> --port <mysql 端口> -uroot -p show binlog events in 'mysql-bin.000001' > out.txt

ps:上面的命令可以使用但是有点问题 可能我对linux不太熟悉 所以失败了很多次 我这边尝试了很久找到一个简单的方法可以参考一下

4.1.1 第一种navicat方式

 

894662762cb9eac4f656269853bfd8a6.png

 

c17d909bfe1c7697ac93e18e32dde257.png

 

e8a77480e6fea31d668708609778e457.png

4.1.2 第二种方式是使用datagrip 更加便捷

 

c8da57d8dbfafe2ba91366e9c92862f7.png

4.1.1.1 以update的sql方式输出

 

ff565377de0d0418d43de6dde14509b8.png

4.1.1.2 以tsv方式输出 需要notpad++等工具阅读

 

04dec88b4b92faf13c7abbe901b9d717.png

 

5bd367929ce7834aa742dd0ac8ce7216.png

 

0e6e918ce9beca06a118a5477a07dcd0.png

二者选其一即可

4.2. 定位最后一条

grep,或者用less、sed、awk……都行,看自己习惯

搜索关键词:

DROP DATABASE `mysql-binlog-test`
CREATE DATABASE  `mysql-binlog-test`

grep -E 'CREATE DATABASE `mysql-binlog-test`|DROP DATABASE `mysql-binlog-test`' out.txt

结果如下:

Log_name

Pos

Event_type

Server_id

End_log_pos

Info

mysql-bin.000001

120

Query

2

293

'/* ApplicationName=DataGrip 2022.1 */ CREATE DATABASE `mysql-binlog-test`';

mysql-bin.000001

650146

Query

2

650315

'/* ApplicationName=DataGrip 2022.1 */ drop schema `mysql-binlog-test`';

 

 

 

 

 

 

找到其中需要的的 CREATE DATABASE的Pos: 120和 DROP DATABASE的Pos:650146

4.3. 用mysqlbinlog恢复

如果没有mysqlbinlog(docker),那么安装mysql-client,此处忽略。

mysqlbinlog --start-position=120 --stop-position=650146 --database=mysql-binlog-test <binlog 路径>/mysql-bin.000001 | mysql -h <mysql IP> --port <mysql 端口> -uroot -p -v ;

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值