電子數據取證之MySQL資料庫刪除數據的恢復指南

2021-01-10 IT168

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、在截取插入語句的時候一定要注意不要把最後一條刪除的語句截取到,不然恢復的數據又會被刪除。

以上就是效率源科技的技術大咖針對使用binlog日誌恢復MySQL資料庫刪除數據的方法,希望上述的問題解決思路能給公檢法一線辦案人員一些參考和幫助。如對文中的操作、描述有任何疑問,或者有相關資料庫恢復案件協助支持也可以直接聯繫效率源科技,獲得技術協助。

相關焦點

  • Mysql數據誤刪除快速回滾
    作者 | Video++極鏈科技OPSTeam整理 | 包包在資料庫操作中,難免會因為各種各樣的原因對數據造成損壞,這個時候就需要對資料庫快速恢復。傳統的方法會先恢復mysql備份,再去用mysqlbinlog抽取指定時間點的日誌,再恢復,這樣的操作比較耗時,容易出錯,那有沒有一種工具可以快速把誤刪除的操作SQL逆過來,然後重新插入誤刪除的數據呢?binlog2sql,就是一個很好的應用,它可以從MySQL binlog解析出SQL,根據不同選項,你可以得到原始SQL、回滾SQL、去除主鍵的INSERT SQL等。
  • MySQL恢復delete的數據
    這世界上有後悔藥-www.houhuiyao.cc 後悔藥數據恢復 站長語前面介紹了MySQL資料庫在使用InnoDB引擎時,如果誤刪了數據表,在共享表空間MySQL數據表InnoDB引擎表誤刪恢復(共享表空間ibdata1)和獨立表空間MySQL數據表InnoDB
  • mysql指令、數據類型、表結構、約束學習記錄
    mysql常用口令--修改用戶密碼的命令mysqladmin -uroot -proot123 password mysql123--登錄mysql資料庫的命令mysql -uroot-proot123--顯示資料庫的命令show databases;--使用資料庫的命令use mysql;--顯示當前連接的資料庫select database
  • 首屆執法辦案電子數據取證大比武復盤解析
    本次比武命題本著「面向實戰、服務實戰、融入實戰」原則,集中考核市場監管執法現場檢查流程及規範操作、文書製作,市場監管領域計算機取證、手機取證、數據恢復技術、數據關聯分析技術應用等內容。比武突出智慧財產權保護領域案件的現場執法和證據分析,設置了現場勘察取證、市場監管和電子數據取證法律法規理論考核、個人數據分析賽、團體數據分析賽等四個比武環節。
  • 「SequoiaDB」巨杉Tech|巨杉資料庫數據高性能數據導入遷移實踐
    為了能夠提供簡單便捷的數據遷移和導入功能,同時更方便地與傳統資料庫在數據層進行對接,巨杉資料庫支持多種方式的數據導入,用戶可以根據自身需求選擇最適合的方式加載數據。本文主要介紹巨杉資料庫集中常見的高性能數據導入方法,其中包括巨杉工具矩陣中的 Sdbimprt導入工具,以及使用SparkSQL, MySQL和原生API 接口進行數據導入,一共四種方式。
  • Python連接MySQL資料庫方法介紹(超詳細!手把手項目案例操作)
    作者 | CDA數據分析師 來源 | CDA數據分析研究院本文涉及到的開發環境:作業系統 Windows 10資料庫 MySQL 8.0Python 3.7.2pip 19.0.3兩種方法進行資料庫的連接分別是PyMySQL和mysql.connector步驟:連接資料庫生成遊標對象執行SQL語句關閉遊標關閉連接PyMySQL
  • 在mysql中如何刪除記錄?delete關鍵字了解一下
    在上一篇文章中我們學習了如何更新mysql中的數據內容,用到的是update這個關鍵字,今天我們要學習的是如何讓在mysql中刪除記錄,也就是從箱子裡面拿走東西,用到的關鍵字是delete這個關鍵字,下面我們就通過一個例子來了解一下。
  • MySQL資料庫教程-資料庫創建與刪除操作
    資料庫創建與刪除顧名思義,資料庫是指數據存儲的倉庫,資料庫使用者可以通過資料庫對象實現數據存儲、管理與維護。因此資料庫的創建操作是資料庫使用的第一步與基礎。在MySQL資料庫管理系統中,資料庫的創建與資料庫刪除操作較為簡單,本文主要介紹資料庫創建與資料庫刪除操作,本文配套視頻課程請點擊資料庫創建與刪除。
  • 為什麼MySQL不建議delete刪除數據
    物理上主要由系統用戶數據文件,日誌文件組成,數據文件主要存儲MySQL字典數據和用戶數據,日誌文件記錄的是data page的變更記錄,用於MySQL Crash時的恢復。Innodb表空間InnoDB存儲包括三類表空間:系統表空間,用戶表空間,Undo表空間。
  • 廣州電子數據取證實驗室揭牌成立—新聞—科學網
    11月2日,廣州中國科學院軟體應用技術研究所電子數據取證實驗室揭牌成立。世界知名的刑事鑑識專家、美國紐海文大學鑑識科學終身教授李昌鈺受聘成為該實驗室的名譽主任。   電子數據作為一種獨立的證據早已經被我國法律認可,而電子數據取證作為一個計算機科學與法學的交叉學科,其相關的法律技術問題一直困擾著實際應用領域。
  • MySQL怎麼刪除#sql開頭的臨時表
    注意: 此類表空間文件不能直接rm -f的方式物理刪除,因為該信息記錄在ibdata的共享表空間裡,直接刪除後,後續實例重啟時會出現錯誤。3. 處理方法3.1   同時存在.frm 和.ibd名稱相同的文件如果 #sql-*.ibd 和 #sql-*.frm兩個文件都存在數據目錄裡的話,可以直接drop table。
  • 電子存證中「哈希值」對數據的保護
    哈希值起源於1953年,IBM舉行的一次歷史性的討論——搜索資料庫中的文件,即每個文件都帶有電子指紋,相當於一個人的指紋;只要搜索到電子指紋,就會搜索到文件。隨著網際網路、移動網際網路、區塊鏈技術發展,哈希值發揮「唯一性、不可逆性」技術特徵廣泛應用各場景。
  • MySQL性能優化
    ,可以提高速度]對mysql配置優化 [配置最大並發數my.ini, 調整緩存大小 ]mysql伺服器硬體升級定時的去清除不需要的數據,定時進行碎片整理(MyISAM)資料庫優化工作對於一個以數據為中心的應用,資料庫的好壞直接影響到程序的性能,因此資料庫性能至關重要。
  • MySQL 熱冷數據分離設計還能這樣!
    另外,為了不改變現有項目使用數據的方式,降低資料庫使用者的門檻,不管是對於線上資料庫還是「離線數據」的數據中心,我們都需要兼容MySQL單表的使用協議。不過這不能是簡單的數據同步,因為離線數據是不能同步線上數據的過期操作的。更具體的,我們可以概括成:MySQL 從節點同步主節點所有數據增添和數據修改的操作,而對於數據的刪除操作不做同步。
  • mysql資料庫行列矩陣調換位置(行與列調換)
    工作上的需求:根據一個表(stu_bysjytj)的數據,矩陣調換位置(即列與行調換位置),並保存至資料庫的視圖中。表(stu_bysjytj)的數據結構如下:解決方案如下:以下是mysql資料庫的具體操作代碼:解釋:id、leibie、jiangong、yuanlin
  • MySQL基於MHA的FailOver過程
    2.選擇新主節點,選擇策略mysqladmin ping檢查資料庫狀態,主機狀態,埠等,判斷從庫節點讀取的master_log_file及read_master_log_pos節點大小,查看Retrieved_gtid_set(已接收到的gtid大小),executed_gtid_set(已執行的
  • Mac數據恢復:如何在iPhone上恢復永久刪除的照片
    >如何從iCloud恢復最近刪除的照片眾所周知,蘋果一直在努力保護用戶數據。如何從iTunes備份中恢復永久刪除的照片除了iCloud,iTunes是大多數iOS用戶進行備份的另一個不錯的選擇。您可以檢查之前是否已將iPhone備份到iTunes。如果這樣做的話,您就有很大的機會取回照片,因為備份中可能包含您已刪除的數據。
  • 免費數據恢復軟體有哪些推薦?數據恢復大師上榜啦!
    還在為找不到專業恢復效果好的的數據恢復軟體而發愁嗎?誤刪電腦數據是每個人都會遇到的情況,不管是桌面文件刪除或者故障,其實電腦中刪除的文件,在一段時間被還是會保留在電腦上,如果在誤刪的時候,就立馬用工具去幫助找回的話,機率是很高的,這樣就不用著急或者去胡亂重啟導致數據真正的丟失了。
  • 小心避坑:MySQL分頁時使用 limit+order by 會出現數據重複問題
    最近鬼吹燈之龍嶺迷窟正在熱播,作為原著黨,還是覺得看書更加刺激驚悚,喜歡驚悚的不要錯過。1、問題描述在MySQL中我們通常會採用limit來進行翻頁查詢,比如limit(0,10)表示列出第一頁的10條數據,limit(10,10)表示列出第二頁。但是,當limit遇到order by的時候,可能會出現翻到第二頁的時候,竟然又出現了第一頁的記錄。
  • MySQL資料庫教程-修改數據表結構與刪除表
    修改數據表結構與刪除表數據表一旦定義好之後,一般不需要再去修改數據表結構,尤其是已經存儲大量數據之後。表結構的變化尤其一些約束的改變會直接影響到存儲數據本身。刪除數據表欄位其中alter table與drop語法關鍵字,所需提供參數為待刪除數據表名字與待刪除欄位名,如我們要從學生信息表中刪除學生性別stusex欄位,實現代碼如下:alter table studentinfor