MySQL系列:MySQL 恢复误删数据
MySQL 恢复误删数据
MySQL 恢复误删数据
MySQL 恢复误删数据,针对 window
和 Linux 均
适用,只需要找到对应的 binlog 目录文件
,默认就是 MySQL 安装目录
下的 data 文件夹
一般误删数据,先停止所有操作,备份数据库
# 备份所有数据库
mysqldump -uroot -p123456 --all-databases > /backup/mysqldump/all.db
# 恢复数据
mysql -uroot -p db_name < /backup/mysqldump/db_name.db
1、查看是否启用 binlog 日志
SHOW VARIABLES LIKE '%log_bin%'
2、查看所有 binlog 日志
SHOW BINARY LOGS;
3、查看正在使用的日志
SHOW MASTER STATUS;
4、查找日志所在文件夹
SHOW VARIABLES LIKE '%datadir%';
5、log 日志转 sql
使用上面使用的 binlog.000056 文件
,先把 该文件复制到其他地方
mysqlbinlog E:\test\result\binlog.000056 > E:\test\result\db.sql
有可能报错
添加 --no-defaults 参数
可以解决,但中文会乱码(使用下面 vbs
或自定义语言实现可解决 乱码问题),一般要加上时间字段转换 sql
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 语句
转换为 insert
即可恢复误删数据,如果需要转换的多可以通过代码自定义实现,主要就是将
delete 转 insert
6、delete 转 insert 恢复误删
通过 vbs 脚本
转换 sql 语句
,当然也可以使用其他的语言,window
执行 vbs
不需要额外的环境,你只需要修改下面 vbs 文件
中输入输出文件名以及编码类型即可
'==========================
'用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
转换结果如下,自行选择新增恢复数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)