• MYSQL误删除DELETE数据找回


    1.查看binlog是否开启

    show variables like '%log_bin%';
    
    • 1

    在这里插入图片描述

    2.查看数据文件存放路径:bin-log路径

    show variables like '%datadir%';
    
    • 1

    在这里插入图片描述

    3.找到删除时间段的binlog,翻译为sql(把服务器上面的binlog文件复制到本地再进行操作)

    mysqlbinlog --base64-output=decode-rows -v --database=数据库名 --start-datetime="2022-10-19 16:40:00" --stop-datetime="2022-10-19 16:450:00" "D:\Program Files\mysql-5.7.30-winx64\mysqldb\bin.000041" > d:\mysqllog.sql
    
    • 1

    4.在生成的 mysqllog.sql 文件同路径下 ,生成将delete翻译为insert的sql文件
    linux:

    cat mysqllog.sql | sed -n '/###/p' | sed 's/### //g;s//*./,/g;s/DELETE FROM/;INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@17.),/\1;/g' | sed 's/@1=//g'| sed 's/@[1-9]=/,/g' | sed 's/@[1-9][0-9]=/,/g' > mysqllogOK.sql
    
    • 1

    5、windows:
    在生成的sql文件同目录下,创建.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
    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

    6、把mysqllog.sql文件和生成的windows中的.vbs放在同一个文件夹中双击执行生成mysqllogOK.sql文件
    7、进入mysqllogOK.sql文件删除其中的delete保留insert再去执行mysqllogOK.sql就成功了
    8、如果binlog日志没有开启可以进行开启
    linux:

    cd /usr/etc/
    vim my.cnf
    
    • 1
    • 2

    在这里插入图片描述

    log-bin=mysql-bin # 开启Binlog 一般只需要修改这一行即可
    binlog-format=ROW # 设置格式 此行可以不加 命令设置即可 详见下方拓展
    server_id=1 # 配置serverID 这一行本来就存在
    systemctl restart mysqld #重启mysql
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    综合工具-Design Compiler使用(从RTL到综合出各种报告timing\area\critical_path)
    外包干了5天,技术明显退步。。。。。
    2023年软件安装管家目录最新
    【HTML】表格行和列的合并
    多线程下的时间处理
    SLA简介
    Python基础语法规则和Java不同的地方
    uni-app 从0 到 1 制作一个项目,收藏等于学会
    年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页
    怎么把两首歌曲拼接在一起?
  • 原文地址:https://blog.csdn.net/weixin_42469936/article/details/127441409