Maison  >  Article  >  base de données  >  Comment résoudre le problème de suppression accidentelle et de restauration de la base de données MySQL

Comment résoudre le problème de suppression accidentelle et de restauration de la base de données MySQL

WBOY
WBOYavant
2023-05-31 17:40:061000parcourir

Une fois, j'ai accidentellement utilisé delete from xxx pour supprimer plusieurs données importantes. J'ai trouvé de nombreuses méthodes sur Internet, mais elles étaient toutes dispersées. Je prévois d'enregistrer le processus de récupération des données.
est grossièrement divisé en les étapes suivantes

1 Vérifiez si le binlog est activé

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

2. Recherchez le nom du fichier binlog

show master logs;
#🎜. 🎜#Exécutez ce qui précède Le code, comme indiqué ci-dessous, TS1-bin.000009 est le nom de fichier que nous recherchons

Comment résoudre le problème de suppression accidentelle et de restauration de la base de données MySQL

3 Vérifiez le journal binaire. log location

show variables like '%datadir%';
#🎜🎜 #4 Selon l'emplacement obtenu ci-dessus, recherchez le fichier TS1-bin.000009

5. commande suivante pour supprimer le fichier de TS1-bin en fonction de la plage horaire de la suppression accidentelle. Le fichier .000009 est exporté dans un fichier 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

Ici, j'ai copié le fichier TS1-bin.000009 dans. le bureau. Étant donné que le chemin de stockage d'origine du fichier comportait des espaces, l'exécution de la commande a échoué et le chemin n'a pas pu être trouvé.

Après avoir obtenu le fichier mysqllog.sql, vous pouvez l'ouvrir avec le Bloc-notes, rechercher le mot-clé DELETE et trouver l'enregistrement des données supprimées


6 Changez l'instruction DELETE en instruction INSERT. , et utilisez vbs sous Windows Pour implémenter, copiez et enregistrez le code suivant sous : fichier deleteToinsert.vbs (doit être un fichier au format .vbs) dans le même répertoire que mysqllog.sql, puis double-cliquez pour exécuter, le fichier mysqllogOK.sql Le fichier sera généré, qui est l'instruction INSERT que nous voulons #🎜🎜 #

'========================== 
'用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 Exécuter après avoir obtenu l'instruction INSERT correspondante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer