資料恢復新姿勢——通過ibd和frm檔案恢復資料
一、背景
1.1、需求來源
需要給客戶將生產環境的資料恢復到測試環境,但是線上環境的xtrabackup全備資料量太大,拷貝下來比較麻煩,並且需要恢復的資料只有整庫中的兩張表的資料,所以客戶只是將全備中的對應表的ibd檔案以及frm檔案拷貝下來了,要求根據ibd檔案以及frm檔案進行資料恢復。
1.2、環境介紹
資料庫版本:MySQL-5.7.22
資料庫要求:innodb_file_per_table=1
二、解決方案步驟
2.1、準備工作
-
準備好需要進行資料恢復的表ibd檔案以及frm檔案
-
安裝一個新的MySQL例項
-
innodb_file_per_table
安裝步驟省略
2.2、表結構恢復
在資料庫中建立一張表名與被恢復表表名一致的表,表結構不限制
將新建表的ibd檔案以及frm檔案拷貝到tmp目錄下備份
# cp message_index.* /tmp/
使用被恢復的frm檔案替換新建立的同名表的frm檔案
# cp /data2/message_index.frm ./ cp:是否覆蓋"./message_index.frm"? y # chown -R mysql:mysql ./*
在資料庫中執行
show create table
語句
注意需要在
show create table
檢視錶結構之前執行
flush tables
語句,因為如果message_index表之前被開啟過,那麼表結構會被快取在記憶體中,
show create table
不會報錯,也就無法從錯誤日誌中拿到我們需要的資訊。
檢視error.log,獲取被恢復表的欄位數
錯誤日誌中會列印我們需要恢復的表的欄位數,這邊可以看到我們需要恢復的表中含有6個欄位
刪除message_index表,並重新建立message_index表
從上面的步驟中我們知道被恢復表中含有6個欄位,所以重新建立的message_index表需要含有6個欄位,欄位名以及欄位型別不限制
再次使用被恢復的frm檔案替換新建立的同名表的frm檔案
# cp /data2/message_index.frm ./ cp:是否覆蓋"./message_index.frm"? y # chown -R mysql:mysql ./*
在MySQL配置檔案中新增
innodb_force_recovery=6
,並重啟資料庫
通過 show create table 語句拿到message_index表的表結構
至此,我們就拿到了我們需要進行恢復的表的表結構。
2.3、表資料恢復
拿到表結構之後,表資料恢復步驟相對錶結構恢復步驟而言會簡單一些
-
將 innodb_force_recovery=6 從配置檔案中去掉、使用/tmp目錄下的ibd檔案以及frm檔案覆蓋當前的對應檔案、重啟資料庫
-
在資料庫中按照獲取到的表結構新建一張message_index表
-
執行 alter table discard tablespace 語句
mysql> alter table message_index discard tablespace;
將要恢復的表的ibd檔案拷貝到當前庫下,並更改屬主以及屬組
# chown -R mysql:mysql ./*
執行
alter table import tablespace
語句
mysql> alter table message_index import tablespace;
可以看到資料已經都恢復回來了。
三、總結
-
以上我們通過xtrabackup全備中的ibd檔案以及frm檔案恢復了資料,這樣也就代表著xtrabackup就算備份失敗,只要有部分ibd檔案以及frm檔案保證完好,MySQL也是可以進行資料恢復的,在極端情況下也能儘可能地減少損失。但是由於xtrabackup是通過記錄redo日誌的方式來儲存備份過程中產生的增量資料,這一部分增量資料目前還沒有辦法恢復。
-
匯入表空間的方式,也給MySQL大資料量遷移方案提供了一種思路:直接拷貝ibd檔案的方式。
| 作者簡介
沈 剛·沃趣科技資料庫技術專家
熟悉MySQL資料庫執行機制,豐富的資料庫及複製架構故障診斷、效能調優、資料庫備份恢復及遷移經驗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2284925/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql通過frm、idb檔案恢復資料MySql
- Mysql5.7利用frm與ibd恢復資料MySql
- Mysql通過ibd檔案恢復資料的步驟詳解MySql
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 雲伺服器恢復MySQL frm資料檔案伺服器MySql
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- MySQL 通過 binlog 恢復資料MySql
- 通過duplicat恢復資料庫資料庫
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 【伺服器資料恢復】StorNext檔案系統資料恢復案例伺服器資料恢復
- 資料恢復:AMDU資料抽取恢復資料恢復
- 【儲存資料恢復】WAFL檔案系統下raid資料恢復案例資料恢復AI
- 【伺服器資料恢復】StorNext檔案系統下raid5資料恢復過程伺服器資料恢復AI
- 儲存崩潰資料恢復過程;資料恢復案例資料恢復
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- Vsan資料恢復—Vsan資料恢復案例資料恢復
- 【Vsan資料恢復】Vsan資料恢復案例資料恢復
- 資料庫資料恢復-SQL SERVER資料庫檔案大小變為“0”的資料恢復方案資料庫資料恢復SQLServer
- MSSQL資料庫資料恢復案例:ndf檔案大小變為0KB恢復資料SQL資料庫資料恢復
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 【資料庫資料恢復】mdb_catalog.wt檔案丟失的MongoDB資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】EXT3檔案系統下MYSQL資料庫恢復案例資料庫資料恢復MySql
- 【伺服器資料恢復】xfs檔案系統資料丟失的資料恢復案例伺服器資料恢復
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- Linux伺服器資料恢復案例;ocfs2檔案系統資料恢復Linux伺服器資料恢復
- 資料庫資料恢復—MongoDB資料庫檔案丟失,啟動報錯的資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- 【分散式儲存資料恢復】hbase和hive資料庫底層檔案誤刪的資料恢復案例分散式資料恢復Hive資料庫
- 怎樣恢復Mac檔案及資料夾資料?BackupLoupe for mac(資料恢復備份助手)3.5.4Mac資料恢復
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 資料庫恢復過程資料庫
- FastDFS檔案系統遷移和資料恢復AST資料恢復
- 伺服器資料恢復案例:FreeNAS資料恢復過程記錄伺服器資料恢復
- 伺服器RAID資料恢復,磁碟陣列資料恢復過程伺服器AI資料恢復陣列
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 【VSAN資料恢復】VSAN儲存資料恢復案例資料恢復
- NAS陣列恢復資料資料恢復開盤陣列資料恢復