ホームページ  >  記事  >  データベース  >  MySQL データベースの誤った削除とロールバックの問題を解決する方法

MySQL データベースの誤った削除とロールバックの問題を解決する方法

WBOY
WBOY転載
2023-05-31 17:40:061036ブラウズ

一度、誤って xxx から削除を使用していくつかの重要なデータを削除してしまいました。インターネット上で多くの方法を見つけましたが、どれも散在していました。データを取得するプロセスを記録する予定です。
大きく分けて以下の手順になります

1. binlog がオンになっているか確認

# log_bin是ON,就说明打开了 OFF就是关闭状态,以下操作,只有为 ON 时有效。
show variables like 'log_bin';

2. binlog ファイル名を確認

show master logs;

上記コードを実行、下の図に示すように、TS1-bin .000009 は探しているファイル名です

MySQL データベースの誤った削除とロールバックの問題を解決する方法

3. binlog ログの場所を確認してください

show variables like '%datadir%';

4 .000009 ファイル

#5 で取得した場所に基づいて TS1-bin を見つけます。mysql インストール ディレクトリの bin ディレクトリに移動し、次のコマンドを実行して TS1-bin.000009 ファイルを SQL ファイルにエクスポートします。誤って削除された時間範囲に基づいて

mysqlbinlog --base64-output=decode-rows -v --database=数据库名 --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 ファイルをデスクトップにコピーしました。ファイルの元のストレージ パスにスペースが含まれていたため、コマンドの実行が失敗し、パスを指定できませんでした見つけられた。

mysqllog.sql ファイルを取得したら、メモ帳でファイルを開き、DELETE キーワードを検索して、削除されたデータのレコードを見つけることができます

6. DELETE ステートメントを INSERT ステートメントに変更し、vbs を使用します。 Windows で実装するには、次のコードをコピーして mysqllog.sql と同じディレクトリに deleteToinsert.vbs ファイル (.vbs 形式のファイルである必要があります) として保存し、ダブルクリックして実行すると、mysqllogOK.sql ファイルが作成されます。生成された、これが必要な INSERT ステートメントです

'========================== 
'用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

7. 対応する INSERT ステートメントを取得した後に実行します。

以上がMySQL データベースの誤った削除とロールバックの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。