MySQL数据库误删回滚的解决

作者:半路马龙 时间:2024-01-19 16:31:11 

某次一不小心,用了delete from xxx 删除了几条重要数据,在网上找了很多方法,但都比较零散,打算记录本次数据找回的过程。
大致分为以下几步

1、查看binlog是否开启

# log_bin是ON,就说明打开了 OFF就是关闭状态,以下操作,只有为 ON 时有效。
show variables like 'log_bin';

2、找到binlog文件名

show master logs;

运行以上代码,如下图 TS1-bin.000009 就是我们要找的文件名

MySQL数据库误删回滚的解决

3、查看binlog日志位置

show variables like '%datadir%';

4、根据上面得到的位置,去找到 TS1-bin.000009 文件

5、进入到mysql安装目录的bin目录下,执行以下命令根据误删除的时间范围从TS1-bin.000009文件导出成sql文件

mysqlbinlog --base64-output=decode-rows -v --database=数据库名 --start-datetime="2022-06-29 15:35:00" --stop-datetime="2022-06-29 15:45:00" C:/Users/Administrator/Desktop/TS1-bin.000009 > C:/Users/Administrator/Desktop/mysqllog.sql

这里我把 TS1-bin.000009 文件拷贝到了桌面,因为该文件原始存放路径有空格,导致命令执行失败,无法找到路径。
得到 mysqllog.sql 文件后,可以用记事本打开,搜索 DELETE 关键字,找到删除数据的记录

6、将 DELETE 语句改造成 INSERT 语句,在windows下用vbs来实现,把下面代码复制保存为:deleteToinsert.vbs 文件(一定要是.vbs格式文件) 与mysqllog.sql在同一目录下,然后双击运行,会生成mysqllogOK.sql文件就是我们要的INSERT语句

'==========================?
'用VBS实现 MYSQL binglog DELETE转INSERT?
'==========================?
function replaceregex(patern,str,tagstr)?
? ? dim regex,matches?
? ? set regex=new regExp?
? ? regex.pattern=patern?
? ? regex.IgnoreCase=true?
? ? regex.global=true?
? ? matches=regex.replace(str,tagstr)?
? ? replaceregex=matches?
end function
?
'======Mysql binlog DELETE转INSERT================
'VBS打开文本文件
Set oldStream = CreateObject("ADODB.Stream")
oldStream.CharSet = "utf-8"
oldStream.Open
oldStream.LoadFromFile("mysqllog.sql") 'binLog生成的DELETE原日志文件
oldText = oldStream.ReadText()
? ? newText=replace(oldText,"### DELETE FROM", ";INSERT INTO")
? ? newText=replace(newText,"### WHERE", "SELECT")
? ? newText=replace(newText,"###", "")
? ? newText=replace(newText,"@1=", "")
? ? newText=replaceregex("\@[1-9]=",newText, ",")
? ? newText=replaceregex("\@[1-9][0-9]=",newText, ",")
oldStream.Close
'VBS保存文件
Set newStream = CreateObject("ADODB.Stream")
newStream.Type = 2 'Specify stream type - we want To save text/string data.
newStream.Charset = "utf-8" 'Specify charset For the source text data.
newStream.Open 'Open the stream And write binary data To the object
newStream.WriteText newText
newStream.SaveToFile "mysqllogOK.sql", 2 'DELETE转成INSERT以后的新的SQL文件名
newStream.Close

7、拿到对应的 INSERT 语句后执行。

参考文章

https://blog.csdn.net/qq_36602951/article/details/120729047
https://juejin.cn/post/7028955574242902023

来源:https://blog.csdn.net/weixin_45059962/article/details/125526229

标签:MySQL,误删,回滚
0
投稿

猜你喜欢

  • Python爬取用户观影数据并分析用户与电影之间的隐藏信息!

    2022-09-09 23:19:47
  • pytorch 使用单个GPU与多个GPU进行训练与测试的方法

    2022-04-04 10:39:07
  • 基于jquery自己写tab滑动门(通用版)

    2024-04-22 22:21:09
  • python绘图模块之利用turtle画图

    2022-08-13 01:17:19
  • 关于TypeScript开发的6六个实用小技巧分享

    2024-04-16 08:59:26
  • git 拉取远程分支到本地的方法步骤

    2022-08-12 15:09:56
  • 使用Python实现控制摄像头的方法详解

    2023-01-15 14:38:12
  • 在python中利用try..except来代替if..else的用法

    2023-09-12 17:50:10
  • javascript农历日历及世界时间代码

    2007-12-21 13:25:00
  • python pyhs2 的安装操作

    2021-03-11 18:21:33
  • vue基于mint-ui实现城市选择三级联动

    2024-06-05 09:17:45
  • 在Python的Django框架中创建语言文件

    2023-05-06 09:54:21
  • ORACLE常用数值函数、转换函数、字符串函数

    2023-07-21 02:03:40
  • Python中利用sorted()函数排序的简单教程

    2022-09-13 20:26:36
  • XMLHTTPRequest的属性和方法简介

    2007-12-18 18:42:00
  • python类中super()和__init__()的区别

    2021-04-17 16:03:02
  • Django中select_related和prefetch_related的用法与区别详解

    2023-10-08 12:38:08
  • Vue提供的三种调试方式你知道吗

    2024-05-29 22:44:57
  • 教你如何在SQL Server计算机列和平均值

    2009-01-20 15:10:00
  • 三表左连接查询的sql语句写法

    2024-01-15 01:54:21
  • asp之家 网络编程 m.aspxhome.com