실수로 여러 개의 중요한 데이터를 삭제하기 위해 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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!