前提條件:
1.你的MySQL數據庫開了binlog功能;
2.用了Delete刪除語句,刪除的是表裏的記錄,不是整個表;
怎麼看我的MySQL數據開沒開啓binlog功能呢?
登入mysql,然後輸入指令:
show variables like '%log_bin%';
第二個紅框顯示ON說明已經開啓binlog功能;
Variable_name | Value |
---|---|
log_bin | ON |
我安裝MySQL 8 的時候沒有注意這裏,好像是默認打開的;在我的配置文件裏也沒有顯示的有,可是就是開了,MySQL 8就是這麼好用麼?;
沒打開binlog的怎麼打開呢?
# log-bin
log-bin=mysql-bin
binlog_format = ROW
我沒試過的啊,因爲我的已經打開了的…
然後輸入指令,查到有3個binlog日誌文件:
show binary logs;
找到你的這幾個文件位置,我的是在MySQL的安裝目錄下和bin文件夾平級的data目錄下:
這3個文件的修改日期以15結尾的這個是最後修改的,我剛好是這個時候做了刪除一條記錄的測試,因此我重點準備放在這個文件上;
輸入指令:
show binlog events in 'binlog.000015';
看到有個Delete_rows,更加篤定就是這了;
怎麼看這條Delete_rows記錄呢?
找到有mysqlbinlog.exe這個程序的地方,輸入指令:
mysqlbinlog.exe --no-defaults -v --start-datetime="2021-01-28 01:00:00" --stop-datetime="2021-01-30 01:30:00" -d forinterview ..\data\binlog.000015
mysqlbinlog.exe | 是執行查看日誌文件的程序 |
---|---|
no-defaults -v | 照着寫 |
–start-datetime=“2021-01-30 01:30:00” | 是開始時間 |
-d forinterview | 是數據庫名稱,forinterview改爲你的數據庫名 |
–stop-datetime=“2021-01-30 01:30:00” | 是結束時間 |
…\data\binlog.000015 | 是數據庫日誌文件的地址 |
這時候看到的是Base64編碼的值,看不懂;
則輸入指令:
mysqlbinlog.exe --no-defaults -v --base64-output=decode-rows --start-datetime="2021-01-28 01:00:00" --stop-datetime="2021-01-30 01:30:00" -d forinterview ..\data\binlog.000015
-base64-output=decode-rows | 把base64解碼 |
---|
可是看到的還是這樣的,不過SQL語句的雛形已經出來了:
再在上一條指令後加入指令,把cmd的日誌輸出到文件:
mysqlbinlog.exe --no-defaults -v --base64-output=decode-rows --start-datetime="2021-01-28 01:00:00" --stop-datetime="2021-01-30 01:30:00" -d forinterview ..\data\binlog.000015 > D:\temp\t1.sql
> | 輸出日誌爲文件 |
---|---|
D:\temp\t1.sql | 文件路徑和文件名,沒有的話會創建 |
得到t1.sql文件,還是亂碼:
記錄亂碼怎麼辦?
用notepad++打開選擇編碼:
就可看到中文了:
復原的話,有這個作爲依據,看具體用什麼方式復原了;