MySQL は誤って削除したデータを復元します


MySQL は、誤って削除されたデータを復元します。これは、Windows と Linux の両方に適用できます。対応する binlog ディレクトリ ファイルを見つけるだけで済みます。デフォルトは、MySQL インストール ディレクトリ内のデータ フォルダです。

通常は、誤ってデータを削除し、最初にすべての操作を停止し、データベースをバックアップします。

# 备份所有数据库
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. 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 ステートメントを inert に変換するだけです。さらに変換する必要がある場合は、主に次の方法でコードをカスタマイズできます。
削除から挿入への変換

6. 誤って削除した場合は、削除して挿入して復元します

vbs スクリプトを介して SQL ステートメントを変換します。もちろん、他の言語も使用できます。ウィンドウは追加の環境なしで 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

変換結果は次のようになります。リカバリデータを追加することを選択します

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41538097/article/details/130978911