【贈書 - 數據恢復】無備份情況下恢復MySQL誤刪的表

2021-03-02 數據和雲


想必大家都知道,Oracle ACE李真旭(Roger)是國內最專業的Oracle 資料庫恢復專家。但知識都是觸類旁通,真正的專家,從來不會局限在一個方向上。今天分享的內容,是他在MySQL數據恢復上所做的嘗試。

本文主要分享在沒有備份的情況下,MySQL資料庫如何恢復被刪除的表。

包含兩個主要的場景:

1、drop table後的恢復

2、truncate table後的恢復

正文:

我們都知道,MySQL Server都很多存儲引擎,並不是每種都可以進行異常情況之下都恢復,比如drop table/tuncate table/delete table/update table /drop database又或者是ibdata文件損壞之類的。用的最多的就是Myisam和innodb存儲引擎。目前基本上都是5.5+版本了,我想幾乎沒有人再去使用Myisam了吧。我這裡所測試都5.6,5.7版本中默認都存儲引擎已經是Innodb了。因此這裡我以Innodb引擎為例子進行說明。

這裡我們首先來測試innodb_file_per_table為off的情況,即表結構和數據存在同一個文件中。這裡我分別測試了表存在主鍵和不存在主鍵的情況,供參考。

innodb_file_per_table參數為off(有主鍵的情況)

[root@killdb ~]# mysqldump --opt -d -uroot -proger recover test_drop0801 > /tmp/innodb_recovery/recover/test_drop0801.sql

mysql> drop table test_drop0801;

Query OK, 0 rows affected (0.00 sec)

我們可以看到,順利完成了drop table的恢復,而且數據完好無損。實際上我這裡還同時測試了無主鍵的情況,經過測試都類似,可以進行完美的恢復。這裡不再累述。

首先這裡我要利用undrop_for_innodb 這個開源工具包(當然需要編譯),目前該工具已經在2017年1月宣布閉源了,而且開始收費。但是我們仍然開源使用之前都開源工具包。另外這裡可以告訴大家,不久的將來,odu 也會支持MySQL.

如下是我的truncate table 測試過程:

[root@killdb innodb_recovery]# mysqldump --opt -d -uroot -proger recover t_enmotech > /tmp/innodb_recovery/recover/t_enmotech.sql

[root@killdb innodb_recovery]#

mysql> truncate table t_enmotech;

Query OK, 0 rows affected (0.00 sec)


該工具包提供的recover_dictionary腳本會創建一個test資料庫,並創建一些數據字典表供恢復查詢使用。同時也會在當前目錄創建dictionary目錄,該目錄下會存放數據字典信息。

可以看到被truncate的表的index_id 為178,我們應該進一步從178 的page中獲取數據。

抽取數據之前,必須提前準備好表的表結構,由於這裡是truncate,因此表結構是存在的,很容易獲取。我這裡是測試,所以之前就備份了結構。

那麼如果是drop table 呢? 實際上我們也可以通過該工具來恢復表結構。

我們可以看到,被truncate 掉的數據被成功恢復了回來。

這裡我測試的truncate table的場景,其實對於drop table、delete table 恢復方法均類似(已測試過)。另外,對於更為嚴重的drop database 其實也是可以進行恢復的。

當然,對於實際的生產庫來講,數據不一定能夠恢復,因為有可能被覆蓋而導致數據恢復不全。MySQL 對於空間的重用機制與Oracle 有很大區別,對於Oracle 而言,如果是delete的數據,還是很難被覆蓋掉的,對於drop 和truncate 則領導別論。然而MySQL則有所不同,MySQL 默認會啟動一些purge 進程來進行空間重用,這是MySQL 5.6的情況:

在MySQL 5.7 版本中更為坑爹,MySQL 默認會啟動4個purge 線程,因此很容易就會導致空間被重用,最終導致數據無法恢復,如下是MySQL 5.7的purge相關參數:

因此,一旦你遭遇turncate table/drop table/delete /drop database等情況,建議立刻停止服務或者停止資料庫,保留現場,以防止環境進一步惡化,最終導致數據無法恢復的情況出現。

雲和恩墨,匯集了國內專業的Oracle、MySQL等數據恢復專家,願為你的資料庫保駕護航!了解雲和恩墨的數據恢復服務:Recovery

  福利

在本文評論區留下你真知灼見/心得體悟,並在9月27號中午12點成為點讚數超過50前2名,即可獲得《Effective MySQL之備份與恢復》!

相關焦點

  • MySQL恢復delete的數據
    MySQL數據表InnoDB引擎表誤刪恢復(共享表空間ibdata1)和獨立表空間MySQL數據表InnoDB引擎表誤刪恢復(獨立表空間innodb_file_per_table=1)的情況下如何恢復數據、如果不幸誤刪了資料庫MySQL資料庫誤刪恢復。
  • MySQL update的數據恢復
    這世界上有後悔藥- www.houhuiyao.cc 後悔藥數據恢復 站長語前面介紹了誤刪部分數據恢復MySQL恢復delete的數據。部分數據恢復指的是非計劃清理的那部分數據,存在恢復的需求的一點建議。
  • MySQL資料庫遭到攻擊篡改---使用備份和binlog進行數據恢復
    數據篡改即是對計算機網絡數據進行修改、增加或刪除,造成數據破壞。資料庫數據被攻擊了首先得查看是被刪除了還是被篡改了?是否有備份數據,是否能夠進行恢復並加固。本文來自資料庫技術專家張正,主要描述了MySQL遭到攻擊篡改數據,利用從庫的備份和主庫的Binlog進行不完全恢復。
  • 【用binlog日誌】恢復 MySQL 資料庫刪除數據
    在數據丟失的緊急情況下,可以嘗試用binlog日誌功能進行數據恢復操作。正是由於binlog日誌以上的特性,在實際的案件取證中也可以通過binlog日誌來恢復刪除數據。要通過binlog日誌恢復mysql資料庫刪除數據的前提:binlog日誌確定是開啟的。
  • 安卓手機的照片備份怎麼恢復?手機誤刪了照片不要怕
    我們的手機變卡,一部分是由過量的手機照片導致的,還有就是我們的P圖軟體,手機裡更是有幾千幾萬張照片,手機照片誤刪也不要緊,小編推薦的這個手機照片恢復管家,一鍵掃描快速恢復,但是一旦手機刪除的舊數據被新數據覆蓋掉,就真的沒辦法找回了。
  • 愛可生詳解MySQL|刪庫了數據無法恢復?教你讓資料庫起死回生
    刪庫了沒有備份怎麼辦?備份恢復後無法啟動服務什麼情況?表定義損壞數據無法讀取怎麼辦?我曾遇到某初創網際網路企業,因維護人員不規範的備份恢復操作,導致系統表空間文件被初始化,上萬張表無法讀取,花了數小時才搶救回來。當你發現數據無法讀取時,也許並非數據丟失了,可能是 DBMS 找不到描述數據的信息。
  • iCloud恢復備份:如何恢復iCloud備份到手機
    iPhone手機作為年輕人最推崇的手機品牌之一,相信很多小夥伴對iTunes、iCloud都不陌生了,這兩個都是蘋果用戶最常用到的數據備份恢復軟體,大部分人只是知道他們有這個作用,但是你們有真正使用過嗎?今天小編就跟大家聊一聊iCloud恢復備份的問題,看完就不用擔心數據丟失了。
  • 手機誤刪照片怎麼恢復?手把手教你恢復!
    手機誤刪照片怎麼恢復?手把手教你恢復!手把手教你恢復!生活中我們常常清理手機中無用的圖片以騰出手機內存,如果誤刪了照片怎麼恢復呢?手機相片誤刪了到底怎麼恢復又快又好?其實按照這幾步可以迅速搞定!大家快和小編一起來看看吧!
  • 蘋果手機照片誤刪怎麼恢復?Iphone設備如何恢復誤刪的照片
    蘋果手機照片誤刪怎麼恢復?Iphone設備如何恢復誤刪的照片?手機中的數據被誤刪,我們要儘量去避免,若是在丟失前做好了備份,倒也不用擔心,但丟失了還沒有備份的數據,我們還要考慮的就是恢復數據了,本文以照片為例,給大家介紹一下蘋果怎麼恢復刪除的照片的恢復操作方法。
  • 蘋果恢復大師軟體:手機照片誤刪怎麼恢復
    手機照片誤刪怎麼恢復?手機相冊留存著我們生活中美好的時光,當手機相冊中的照片丟不小心誤刪了,我們應該如何找回呢?今天,小編就來分享一個手機照片誤刪如何恢復的教程,希望可以幫助有需要的朋友,主要藉助的是蘋果恢復大師這款專業的蘋果數據恢復軟體,下面我們一起來看一下具體的操作方法吧。
  • 恢復手機誤刪照片?恢復三年前刪除的照片!
    恢復手機誤刪照片?恢復三年前刪除的照片!也就是說在這種情況下,數據還是存在於手機中但是我們普通用戶不能的,看到這部分數據。通過一些算法操作,可以將這部分數據重新展現出來,也就是我們俗稱的「恢復」。
  • 手機相冊裡的照片誤刪怎麼恢復?你找對方法了嗎
    手機相冊裡的照片誤刪怎麼恢復?手機相冊誤刪,已經算是經常發生的事情了,但是手機照片除了刪除了本地相冊以外,現在的智慧型手機都有自動備份的功能,所以在照片誤刪除的情況下還可以通過備份恢復,接下來具體給大家講解一下有備份和無備份兩種情況下怎麼恢復手機刪除的照片。
  • 手機備忘錄誤刪之後如何恢復?超實用的恢復方法!
    手機備忘錄誤刪之後如何恢復?超實用的恢復方法! 方法二:icloud備份恢復法 如果蘋果手機備忘錄在icloud有備份,可以在icloud官網下載自己備份過的手機備忘錄進行下載恢復。 這裡小編要提醒各位小夥伴,注意雖然iPhone手機也可以登錄icloud帳號進行找回,但是icloud內存只有5G,如果手機其他數據較大,備份不全的時候,建議應該先對手機連接電腦進行完整備份,否則容易造成更多數據丟失。
  • 微信刪除的聊天記錄怎麼恢復?教你跟誤刪說拜拜!
    通常情況下,我們誤刪微信聊天記錄後可以分為兩種情況:情況一:在誤刪微信聊天記錄前做了數據備份情況二:在誤刪微信聊天記錄前未做數據備份針對情況一:從備份數據中找回誤刪微信聊天記錄前做了數據備份,想要恢復自然十分的方便,在這裡我們以電腦端微信備份為例。
  • 蘋果手機備份恢復在哪裡?專業備份恢復教程分享
    蘋果手機備份恢復在哪裡?使用手機的時候會在手機上產生很多數據,為了避免一些重要的數據丟失,定期進行備份非常有必要。很多人不清楚蘋果手機的備份恢復操作,今天小編就給大家詳細介紹幾種常見的數據備份恢復方法。
  • 恢復手機誤刪照片?用對方法,還有什麼不能被恢復?
    恢復手機誤刪照片?用對方法,還有什麼不能被恢復?也就是說在這種情況下,數據還是存在於手機中但是我們普通用戶不能的,看到這部分數據。通過一些算法操作,可以將這部分數據重新展現出來,也就是我們俗稱的「恢復」。
  • 手機照片誤刪了怎麼恢復?最新方法,輕鬆找回!
    但是大家也經常遇到照片誤刪的情況,難麼大家知道手機照片誤刪了怎麼恢復嗎?今天我們就來看看最新的照片恢復方法吧,找對方法,就能輕鬆找回照片了!方法一:利用已有備份數據進行恢復我們都知道,iCloud是蘋果官方提供的特色服務之一,能夠幫助我們備份同步蘋果設備中的通訊錄、照片、簡訊等常用數據。
  • 行車記錄儀刪除的記錄能恢復嗎?SD卡數據誤刪輕鬆恢復
    行車記錄儀刪除的記錄能恢復嗎?不管什麼設備每天使用,我們內存卡數據存滿後,會定期清理不用的數據,想要恢復自己行車記錄儀的視頻其實沒有想像中那麼難,記得去年我的行車記錄儀數據存滿後,原本本是準備要存檔保存的,但不小心手抖把裡面的視頻誤刪了。其實我相信不僅是我一個人免不了誤刪數據這種情況的出現,那麼SD卡數據如果被誤操作刪除了該怎麼恢復呢?
  • 微信聊天記錄誤刪怎麼恢復?大師指導:微信恢復有妙招!
    微信聊天記錄誤刪怎麼恢復?很多小夥伴可能跟小編一樣,有隨手清理手機內存和微信記錄的習慣,尤其對於我們這些手機內存本身就不大的人,有時候可能清理的時候不小心誤刪了非常重要的聊天記錄,小編的一個朋友就因為手誤刪除女朋友微信記錄,而差點分手。遇到這樣的情況不要慌張,問題不大,小編教你三個恢復方法,2年前的記錄都可以恢復。
  • 手機誤刪視頻怎麼恢復?同時適合安卓和蘋果手機的恢復方法!
    手機裡誤刪的視頻怎麼恢復?我們很多人在日常生活中會用視頻來記錄生活,視頻鏡頭下的事物往往也很多姿多彩,雖然有時候我們會刪除一些自己覺得不重要的視頻,事後想起來非常重要,或者是誤刪了喜歡的視頻,都沒有關係,我們有恢復刪除的手機視頻的方法,看完可以操作一下,就知道以後怎麼恢復視頻文件了。