时间:2023-10-27来源:系统城装机大师作者:佚名
MySQL 恢复误删数据,针对 window 和 Linux 均适用,只需要找到对应的 binlog 目录文件,默认就是 MySQL 安装目录下的 data 文件夹
一般误删数据,先停止所有操作,备份数据库
| 1 2 3 4 |
# 备份所有数据库mysqldump -uroot -p123456 --all-databases > /backup/mysqldump/all.db# 恢复数据mysql -uroot -p db_name < /backup/mysqldump/db_name.db |
| 1 | SHOW VARIABLES LIKE '%log_bin%' |

| 1 | SHOW BINARY LOGS; |

| 1 | SHOW MASTER STATUS; |

| 1 | SHOW VARIABLES LIKE '%datadir%'; |

使用上面使用的 binlog.000056 文件,先把 该文件复制到其他地方
| 1 | mysqlbinlog E:\test\result\binlog.000056 > E:\test\result\db.sql |
有可能报错

添加 --no-defaults 参数可以解决,但中文会乱码(使用下面 vbs 或自定义语言实现可解决 乱码问题),一般要加上时间字段转换 sql
| 1 | mysqlbinlog --no-defaults --base64-output=decode-rows -v --database=oauth --start-datetime="2023-06-01 01:44:00" --stop-datetime="2023-06-01 01:48:00" F:\mysql-8.0.29-winx64\data\binlog.000058 > E:\test\result\db.sql |
转换成功如下,可以看到删除 sql 的语句

接下来只需要将上面的 delete 语句转换为 inert 即可恢复误删数据,如果需要转换的多可以通过代码自定义实现,主要就是将
delete 转 insert
通过 vbs 脚本转换 sql 语句,当然也可以使用其他的语言,window 执行 vbs 不需要额外的环境,你只需要修改下面 vbs 文件中输入输出文件名以及编码类型即可
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
'=========================='用VBS实现 MYSQL binglog DELETE 转 INSERT'==========================function replaceregex(patern,str,tagstr)dim regex,matchesset regex=new regExpregex.pattern=paternregex.IgnoreCase=trueregex.global=truematches=regex.replace(str,tagstr)replaceregex=matchesend function'Mysql binlog DELETE转INSERT=========='VBS打开文本文件Set oldStream = CreateObject("ADODB.Stream")oldStream.CharSet = "utf-8"oldStream.Open'binLog 生成的 DELETE 原日志文件'oldStream.LoadFromFile("E:\test\result\db.sql") 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 objectnewStream.WriteText newTextnewStream.SaveToFile "mysqllogOK.sql", 2 'DELETE转成INSERT以后的新的SQL文件名newStream.Close |
转换结果如下,自行选择新增恢复数据

到此这篇关于MySQL恢复误删数据的文章就介绍到这了
2023-10-30
windows上的mysql服务突然消失提示10061 Unkonwn error问题及解决方案2023-10-30
MySQL非常重要的日志bin log详解2023-10-30
详解MySQL事务日志redo log一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...
2023-10-30
Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...
2023-10-30