MySQL數(shù)據(jù)庫誤刪回滾的解決
某次一不小心,用了delete from xxx 刪除了幾條重要數(shù)據(jù),在網(wǎng)上找了很多方法,但都比較零散,打算記錄本次數(shù)據(jù)找回的過程。
大致分為以下幾步
1、查看binlog是否開啟
# log_bin是ON,就說明打開了 OFF就是關(guān)閉狀態(tài),以下操作,只有為 ON 時(shí)有效。 show variables like 'log_bin';
2、找到binlog文件名
show master logs;
運(yùn)行以上代碼,如下圖 TS1-bin.000009 就是我們要找的文件名
3、查看binlog日志位置
show variables like '%datadir%';
4、根據(jù)上面得到的位置,去找到 TS1-bin.000009 文件
5、進(jìn)入到mysql安裝目錄的bin目錄下,執(zhí)行以下命令根據(jù)誤刪除的時(shí)間范圍從TS1-bin.000009文件導(dǎo)出成sql文件
mysqlbinlog --base64-output=decode-rows -v --database=數(shù)據(jù)庫名 --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 文件拷貝到了桌面,因?yàn)樵撐募即娣怕窂接锌崭?,?dǎo)致命令執(zhí)行失敗,無法找到路徑。
得到 mysqllog.sql 文件后,可以用記事本打開,搜索 DELETE 關(guān)鍵字,找到刪除數(shù)據(jù)的記錄
6、將 DELETE 語句改造成 INSERT 語句,在windows下用vbs來實(shí)現(xiàn),把下面代碼復(fù)制保存為:deleteToinsert.vbs 文件(一定要是.vbs格式文件) 與mysqllog.sql在同一目錄下,然后雙擊運(yùn)行,會生成mysqllogOK.sql文件就是我們要的INSERT語句
'==========================? '用VBS實(shí)現(xiàn) MYSQL binglog DELETE轉(zhuǎn)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轉(zhuǎn)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轉(zhuǎn)成INSERT以后的新的SQL文件名 newStream.Close
7、拿到對應(yīng)的 INSERT 語句后執(zhí)行。
參考文章
https://blog.csdn.net/qq_36602951/article/details/120729047
https://juejin.cn/post/7028955574242902023
到此這篇關(guān)于MySQL數(shù)據(jù)庫誤刪回滾的解決的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫誤刪回滾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語句使用
這篇文章主要介紹了MySQL插入和查詢數(shù)據(jù)的相關(guān)命令及語句使用,包括相關(guān)的PHP腳本操作方法講解也很詳細(xì),需要的朋友可以參考下2015-11-11Mysql遷移到TiDB雙寫數(shù)據(jù)庫兜底方案詳解
這篇文章主要為大家介紹了Mysql遷移到TiDB雙寫數(shù)據(jù)庫兜底方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01mysql遞歸函數(shù)with?recursive的用法舉例
在實(shí)際開發(fā)的過程中,我們會遇到一些數(shù)據(jù)是層級關(guān)系的、要展示數(shù)據(jù)子父級關(guān)系的時(shí)候,下面這篇文章主要給大家介紹了關(guān)于mysql遞歸函數(shù)with?recursive的用法舉例,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08MySQL數(shù)據(jù)庫高可用HA實(shí)現(xiàn)小結(jié)
MySQL數(shù)據(jù)庫是目前開源應(yīng)用最大的關(guān)系型數(shù)據(jù)庫,有海量的應(yīng)用將數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫中,這篇文章主要介紹了MySQL數(shù)據(jù)庫高可用HA實(shí)現(xiàn),需要的朋友可以參考下2022-01-01淺談sql連接查詢的區(qū)別 inner,left,right,full
下面小編就為大家?guī)硪黄獪\談sql連接查詢的區(qū)別 inner,left,right,full。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10