时间: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,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 '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 object newStream.WriteText newText newStream.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