一度、誤って xxx から削除を使用していくつかの重要なデータを削除してしまいました。インターネット上で多くの方法を見つけましたが、どれも散在していました。データを取得するプロセスを記録する予定です。
大きく分けて以下の手順になります
1. binlog がオンになっているか確認
# log_bin是ON,就说明打开了 OFF就是关闭状态,以下操作,只有为 ON 时有效。 show variables like 'log_bin';
2. binlog ファイル名を確認
show master logs;
上記コードを実行、下の図に示すように、TS1-bin .000009 は探しているファイル名です
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 キーワードを検索して、削除されたデータのレコードを見つけることができます
'========================== '用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.Close7. 対応する INSERT ステートメントを取得した後に実行します。
以上がMySQL データベースの誤った削除とロールバックの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。