作者:admin 日期:2023-10-09 瀏覽: 次
電子數據取證之MySQL數據庫刪除數據的恢復指南
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL數據庫使用的比較多。
公檢法部門在處理涉黃、詐騙的案件時,常常會遇到對涉案網站、論壇的服務器進行取證,有時嫌疑人為了毀滅罪證,故意刪除數據,這就涉及到對MySQL數據庫進行數據恢復、固定和取證。效率源科技的技術大咖針對一線辦案人員遇到的痛點,寫了這篇MySQL數據庫刪除數據的恢復指南,希望對辦案人員有所啟發。
binlog日志簡介:
binlog 就是binary log,二進制日志文件,這個文件記錄了MySQL所有的DDL和DML(除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間。
binlog日志包括兩類文件:
1)二進制日志索引文件(文件名后綴為.index):用于記錄所有的二進制文件;2)二進制日志文件(文件名后綴為.00000*):記錄數據庫所有的DDL和DML(除了數據查詢語句select)語句事件。
binlog日志對于mysql數據庫來說是十分重要的。在數據丟失的緊急情況下,可以嘗試用binlog日志功能進行數據恢復操作。正是由于binlog日志以上的特性,在實際的案件取證中也可以通過binlog日志來恢復刪除數據。要通過binlog日志恢復mysql數據庫刪除數據的前提:binlog日志確定是開啟的。
查看binlog日志是否開啟,有以下三種方法
方法一:打開MySQL數據庫的配置文件(windows系統中的配置文件為my.ini,一般在安裝目錄的根目錄下;Linux系統中配置文件為my.cnf,一般在/usr/local/mysql/etc/目錄下),在配置文件中查看log-bin=MySQL-bin有沒有被注釋掉(每行第一個字符為#號表示該行被注釋),若沒被注釋表示開啟,若被注釋表示沒有開啟。
方法二:在MySQL命令行下使用show variables like ‘log_bin’;命令查看binlog日志是否開啟,Value的值為ON表示開啟,為OFF表示關閉。
方法三:在存放數據庫的文件夾中是否存在mysql-bin.000001類似的文件,有則表示binlog日志功能是開啟的。
在數據恢復過程中會用到的binlog日志操作命令
1、查看所有binlog日志列表:
在mysql命令界面輸入命令: mysql> show master logs
2、查看master狀態,即最后(最新)一個binlog日志的編號名稱及其最后一個操作事件pos結束點(Position)值:
在mysql命令界面輸入命令: mysql> show master status
3、刷新log日志,自此刻開始產生一個新編號的binlog日志文件:
在mysql命令界面輸入命令:mysql> flush logs
注:每當mysqld服務重啟時,會自動執行此命令,刷新binlog日志;在mysqldump備份數據時加 -F 選項也會刷新binlog日志
4、重置(清空)所有binlog日志:
在mysql命令界面輸入命令:mysql> reset master
如何讀取binlog日志中的內容?濱海數據恢復
1、使用mysqlbinlog自帶查看命令法:
注: binlog是二進制文件,普通文件查看器cat more vi等都無法打開,必須使用自帶的 mysqlbinlog 命令查看binlog日志與數據庫文件在同目錄中。
Mysql安裝路徑下的bin文件夾下輸入以下命令:
C:\xampp\mysql\bin>mysqlbinlog C:\xampp\mysql\data\mysql-bin.000009
2、上面這種辦法讀取出binlog日志的全文內容較多,不容易分辨查看pos點信息,這里介紹一種更為方便的查詢命令在MySQL的命令界面:
在mysql命令界面輸入:mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
選項解析↓
IN 'log_name':指定要查詢的binlog文件名(不指定就是第一個binlog文件)FROM pos:指定從哪個pos起始點開始查起(不指定就是從整個文件首個pos點開始算)LIMIT [offset,]:偏移量(不指定就是0)row_count:查詢總條數(不指定就是所有行)
刪除數據案例及操作步驟:
下面我們通過一個實例操作來完整查看「如何通過binlog日志恢復MySQL數據庫刪除數據。
案例介紹:
現有MySQL數據庫,其中有名為test的數據庫,其中沒有任何的表,懷疑數據被刪除,在該電腦中還發現了該數據庫的備份,備份最后被修改的時間為2018-11-21 15:27:12。
目的:
查看是否有刪除的操作,如有刪除嘗試恢復出刪除的表的內容。
思路分析:
1、判斷數據庫是否開啟了binlog日志的功能;
2、通過binlog日志查詢是否有刪除的操作;
3、若刪除了數據,通過binlog日志恢復數據庫中的內容。
下圖就是通過binlog日志實現增量恢復數據庫刪除數據的流程:
01.判斷數據庫是否開啟了binlog日志:
淮安數據恢復在MySQL命令行下使用show variables like‘log_bin’;命令中log_bin的Value為ON,該數據庫的binlog日志是開啟的。
02.判斷數據庫是否有被刪除的操作:
1)在mysql命令界面通過show master logs;命令查看binlog日志列表,發現一共有8條日志。
2)在mysql命令界面通過命令show binlog events in 'mysql-bin.000008';可以查看最后兩條命令為“use ‘test‘;delete from t1,use `test`;DROP TABLE `t1`”由此可判斷出數據庫test中t1表中的內容被清空了,并且把表也刪除了。南通數據恢復
03.恢復數據庫中刪除的數據:
1)由于表t1被刪除了,沒有該表的數據結構無法直接通過binlog日志來恢復刪除的數據;但是我們在電腦中發現了該數據庫的備份,直接還原后就可以得到表t1的數據結構。(這里不做還原的詳細解說,如果您想了解還原詳細操作步驟,可在后臺留言)。
恢復出的數據結構
2)備份最后修改時間為2018-11-21 15:27:12,MySQL-bin.000008的創建時間為2018?-?11?-?20 ??14:15:40,可以推斷出備份后表t1的所有操作都在該日志中。
3)在mysql命令界面使用命令show binlog events in 'mysql-bin.000008';打開最后一個日志文件,找出開始和結尾的pos點,分別為:4和1223,如下圖:
4)提取日志文件該段落:在mysql安裝界面的bin目錄下輸入一下命令:mysqlbinlog C:\xampp\data\mysql-bin.000008 --start-position=4 --stop-position=1223 -r 1.sql,該命令把日志文件中的所有語句提取到了bin目錄下的1.sql中。
5)通過分析該sql文件可以發現其中記錄了每一條命令的執行的時間,找到備份創建時間2018-11-21 15:27:12之后的所有命令另存為2.sql。如下圖:
6)另存為2.sql后,把最后兩條刪除的命令去除,直接在數據庫中運行,就可以恢復出表中的所有數據。
注意事項:
1、在恢復之前一定要確認MySQL數據庫的binlog日志是開啟的;2、若把表刪除一定要想辦法把表的數據結構找到,這樣才能準確的恢復出數據;3、binlog日志中是記錄了每條語句的執行時間的,可以通過時間來恢復;4、在截取插入語句的時候一定要注意不要把最后一條刪除的語句截取到,不然恢復的數據又會被刪除。