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

WBOY
풀어 주다: 2023-05-31 17:40:06
앞으로
1039명이 탐색했습니다.

실수로 여러 개의 중요한 데이터를 삭제하기 위해 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿