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을 삭제하는 명령문을 볼 수 있습니다.
여기에 이미지 설명 삽입
다음으로 위의 삭제 명령문을 비활성으로 변환하면 실수로 삭제된 데이터를 복원할 수 있습니다.더 많은 변환이 필요한 경우 주로 코드를 사용자 정의할 수 있습니다.
삭제를 삽입으로 변환

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