>  기사  >  데이터 베이스  >  실수로 MySQL 데이터베이스를 삭제하고 롤백하는 문제를 해결하는 방법

실수로 MySQL 데이터베이스를 삭제하고 롤백하는 문제를 해결하는 방법

WBOY
WBOY앞으로
2023-05-31 17:40:061000검색

실수로 여러 개의 중요한 데이터를 삭제하기 위해 delete from xxx를 사용했습니다. 인터넷에서 여러 가지 방법을 찾았지만 모두 흩어져 있었습니다. 데이터 검색 과정을 기록할 예정입니다.
대략 다음과 같은 단계로 나누어집니다

1. binlog가 켜져 있는지 확인

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

2. binlog 파일명을 찾습니다

show master logs;

아래와 같이 위 코드를 실행합니다. TS1-bin.000009가 우리가 사용하는 파일명입니다. are looking for

실수로 MySQL 데이터베이스를 삭제하고 롤백하는 문제를 해결하는 방법

3. binlog 로그 위치 확인

show variables like '%datadir%';

4. 위에서 구한 위치를 기준으로 TS1-bin.000009 파일 찾기

5. 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 문으로 변경하고 Windows에서는 vbs를 사용하여 다음을 복사합니다. 코드를 작성하고 mysqllog.sql과 동일한 디렉터리에 :deleteToinsert.vbs 파일(.vbs 형식 파일이어야 함)로 저장한 다음 두 번 클릭하여 실행하면 mysqllogOK.sql 파일이 생성됩니다. 이것이 바로 INSERT 문입니다. want

'========================== 
'用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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제