1. 程式人生 > >MySQL資料庫InnoDB資料恢復工具使用總結

MySQL資料庫InnoDB資料恢復工具使用總結

本文從實際使用經驗出發,介紹一款開源的MySQL資料庫InnoDB資料恢復工具:innodb-tools,它通過從原始資料檔案中提取表的行記錄,實現從丟失的或者被毀壞的MySQL表中恢復資料。例如,當你不小心執行DROP TABLE、TRUNCATE TABLE或者DROP DATABASE之後,可以通過以下方式恢復資料。

以下內容大部分參考自:Percona Data Recovery Tool for InnoDB,文件是英文的,而且寫的比較晦澀,這裡是個人的實戰經驗總結,供大家參考學習。

在介紹innodb-tools工具進行資料恢復之前,首先明確以下幾點:

1、這個工具只能對InnoDB/XtraDB表有效,而無法恢復MyISAM表(注: Percona號稱有一套用於恢復MyISAM表的工具,但是本人未做嘗試)。

2、這個工具是以儲存的MySQL資料檔案進行恢復的,而不用MySQL Server執行。

3、不能保證資料總一定可被恢復。例如,被重寫的資料不能被恢復,這種情況下可能需要針對系統或物理的方式來恢復,不屬於本工具的範疇。

4、恢復的最好時機是當你發現數據丟失時,儘快備份MySQL資料檔案。

5、使用這個工具需要手動做一些工作,並不是全自動完成的。

6、恢復過程依賴於你對丟失資料的瞭解程度,在恢復過程中可能需要在不同版本的資料之間做出選擇。那麼如果你越瞭解自己的資料,恢復的可能性就越大。

接下來,下面通過一個例子來介紹如何通過這個工具進行恢復。

1. 前提條件

首先,需要理解的是innodb-tools工具不是通過連線到線上的database進行資料恢復,而是通過離線拷貝資料的方式進行的。注意:不要在MySQL執行的時候,直接拷貝InnoDB檔案,這樣是不安全的,會影響資料恢復過程。

為了完成資料恢復,必須知道將要被恢復的表結構(列名、資料型別)。最簡單的方式就是SHOW CREATE TABLE,當然後續會介紹幾種可替代的方式。因此,如果有一個MySQL server作為備份,即使資料是很早的甚至表中沒有記錄,可以有助於使用innodb-tools工具進行恢復。不過這個不是必須的。

2. 簡單例子

mysql> TRUNCATE TABLE customer;

3. 構建工具

為了構建innodb-tools工具,需要依賴於C編譯器、make工具等。

1、下載解壓innodb-tools工具原始碼:

1 2 wget https://launchpad.net/percona-data-recovery-tool-for-innodb/trunk/release-0.5/+download/percona-data-recovery-tool-for-innodb-0.5.tar.gz tar -zxvf percona-data-recovery-tool-for-innodb-0.5.tar.gz
複製程式碼

2、進入解壓後根目錄下的mysql-source目錄,執行配置命令(注:不執行make命令):

1 2 cd percona-data-recovery-tool-for-innodb-0.5/mysql-source ./configure
複製程式碼

3、完成配置步驟後,回到解壓後的根目錄,執行make命令,編譯生成page_parserconstraints_parser工具

1 2 cd .. make
複製程式碼

page_parser工具將根據InnoDB的底層實現原理,解析表的頁和行結構。constraints_parser工具暫時不使用,後續還需要在定義表結構之後,重新編譯生成它。
如果編譯過程中出現問題,點選這裡。本文使用過程中沒有出現問題,故不再一一列舉。

4. 提取需要的頁

InnoDB頁的預設大小是16K,每個頁屬於一個特定表中的一個特定的index。page_parser工具通過讀取資料檔案,根據頁頭中的index ID,拷貝每個頁到一個單獨的檔案中。

如果你的MySQL server被配置為innodb_file_per_table=1,那麼系統已經幫你實現上述過程。所有需要的頁都在.ibd檔案,而且通常你不需要再切分它。然而,如果.ibd檔案中可能包含多個index,那麼將頁單獨切分開還是有必要的。如果MySQL server沒有配置innodb_file_per_table,那麼資料會被儲存在一個全域性的表名稱空間(通常是一個名為ibdata1的檔案,本文屬於這種情況),這時候就需要按頁對檔案進行切分。

4.1 切分頁

執行page_parser工具進行切分:

  • 如果MySQL是5.0之前的版本,InnoDB採取的是REDUNDANT格式,執行以下命令:
1 ./page_parser -4 -f /path/to/ibdata1
  • 如果MySQL是5.0版本,InnoDB採取的是COMPACT格式,執行以下命令:
1 ./page_parser -5 -f /path/to/ibdata1

執行後,page_parser工具會建立一個pages-<TIMESTAMP>的目錄,其中TIMESTAMP是UNIX系統時間戳。在這個目錄下,為每個index ID,以頁的index ID建立一個子目錄。例如:

1 2 pages-1330842944/FIL_PAGE_INDEX/0-1/1-00000008

相關推薦

MySQL資料庫InnoDB資料恢復工具使用總結

本文從實際使用經驗出發,介紹一款開源的MySQL資料庫InnoDB資料恢復工具:innodb-tools,它通過從原始資料檔案中提取表的行記錄,實現從丟失的或者被毀壞的MySQL表中恢復資料。例如,當你不小心執行DROP TABLE、TRUNCATE TABLE或

使用binlog日誌恢復MySQL資料庫刪除資料的方法

binlog日誌簡介: binlog 就是binary log,二進位制日誌檔案,這個檔案記錄了MySQL所有的DDL和DML(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間。 binlog日誌包括兩類檔案: 1)二進位制日誌索引檔案(檔名字尾為.index):用於

mysql資料庫通過日誌恢復資料

大家應該知道mysql通過備份恢復檔案的方法,其實用日誌其實也可以恢復資料,方法如下 1.找到my.ini檔案 (方法:先到mysql安裝目錄找my.ini檔案如果此安裝目錄沒有找到該檔案,則此檔案一般在C盤下的ProgramData資料夾中,此資料夾為隱藏資料

[資料庫] Navicat for MySQL定時備份資料庫資料恢復

在做資料庫修改或刪除操作中,可能會導致資料錯誤,甚至資料庫奔潰,而有效的定時備份能很好地保護資料庫。本篇文章主要講述Navicat for MySQL定時備份資料庫和資料恢復等功能,同時可以定時播放電影

MySQL資料庫InnoDB和MyISAM資料引擎的差別

InnoDB和MyISAM是在使用MySQL最常用的兩個表型別,各有優缺點,視具體應用而定。基本的差別為:MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。MyISAM型別的表強調的是效能,其執行數度比InnoDB型別更快,但是不提供事務支援,而InnoD

MySql資料庫備份與恢復——使用mysqldump 匯入與匯出方法總結

MySql資料庫備份與恢復——使用mysqldump 匯入與匯出方法總結 mysqldump客戶端可用來轉儲資料庫或蒐集資料庫進行

MySQL資料庫資料表的基本操作

初學小建議 MySQL是不區分大小寫的,大家在初學的時候希望能養成習慣,把保留詞,關鍵字統一採用大寫的形式書寫,其他的使用小寫字母,方便區分。 初期這個習慣可能不太容易養成,但是一旦習慣,對工作的規範性會好很多,統一的規範方便大家一起工作! 選單

mysql資料庫連線異常問題(總結mysql資料庫連線異常問題(總結

mysql資料庫連線異常問題(總結) 1.1 前言     最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。 1.2  An attempt by

Percona XtraBackup 資料恢復工具安裝 ubuntu 16.04

來源: https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/apt_repo.html   Installing Percona XtraBackup on Debi

scrapy框架 基於mysql資料庫儲存資料方法、案例

流程思路 將解析資料存到items物件 使用yield 將items交給管道檔案處理 在管道檔案pipelines編寫程式碼儲存到資料庫 在setting配置檔案開啟管道 案例 items中 按照格式定義欄位 import s

mysql資料庫資料約束

/*資料約束*/    CREATE TABLE user01 (    uid INT NOT NULL,/*非空約束*/   PRIMARY KEY  /*主鍵約束*/  AUTO_INCREMENT /*

MySql日誌及資料恢復

MySql日誌 開啟bin-log日誌 1,使用vim或其他編輯器,開啟mysql配置檔案 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 2,找到一下兩個配置項 server-id =123456 log_bin = var/log

幾款資料恢復工具的使用

遇到資料丟失、文件誤刪除等情況,可使用專門的資料恢復軟體進行恢復(一般較貴)。下面介紹Recuva、FinalData和FinalRecovery這3款資料恢復軟體。 一、使用Recuva恢復資料 Recuva是由Piriform開發的可以恢復被誤刪除的任意格式檔案的恢復工具。Recuva能直

MySQL使用者管理,常用SQL語句,MySQL資料庫備份與恢復

[toc] MySQL使用者管理,常用SQL語句,MySQL資料庫備份與恢復 擴充套件 SQL語句教程 http://www.runoob.com/sql/sql-tutorial.html 什麼是事務?事務的特性有哪些? http://blog.csdn.net/yenange/article/deta

MySQL---當Java遇上MySQL⑧---資料庫資料、生成Excel檔案

玩轉資料庫元資料主要有兩個類:      *  java.sql.DatabaseMetaData 和 java.sql.ResultSetMetaData      *    DatabaseMetaData:可以獲得驅動資訊、所有資料庫名,所有表格名(檢視、儲存過程等)

mysql資料庫插入資料顯示Extracted SQL state class '22' from value '22001'解決辦法

Extracted SQL state class ‘22’ from value ‘22001’ 問題描述 最近在完成一個專案時,需要實現在網頁從excel匯入資料,然後儲存到資料庫中.在測試階段時發現執行沒有任何問題,但是實際部署過程中發現,使用者上傳exc

VS2013使用MySQL資料庫資料集中如何填充帶引數的sql語句

本人在網上查詢一番後,發現均無法實現效果,之前的專案使用Oracle,sql傳參類似“......where id = :id”,然後突然想到直接tableAdapter裡面新建一個update查詢,不就知道使用MySQL資料庫時sql傳參了嘛。以上思路,下給例子:

MySQL資料庫備份和恢復方案小結

這兩天在調研MySQL資料庫的備份和恢復方案,備份物件是對大量Innodb表,或者加上少量的MyISAM表。   InnoDB備份常見問題: 檔案一致性:資料檔案、快取、日誌檔案必須保持嚴格一致。加鎖的方法沒法保證一致性,因為InnoDB後臺重新整理資料是非同步進行的。

mysql資料庫連線異常問題(總結

1.1 前言     最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。 1.2  An attempt by a client to checkout a Connection has timed ou

關於mysql資料庫匯入資料慢的解決方法

mysqldump匯入慢的解決方法 mysql匯出的SQL語句在匯入時有可能會非常非常慢,經歷過匯入僅45萬條記錄,竟用了近3個小時。在匯出時合理使用幾個引數,可以大大加快導 入的速度。 -e 使用包括幾個VALUES列表的多行INSERT語法; –max_al