mysql通過frm、idb檔案恢復資料
db.opt
用來記錄該庫的預設字符集編碼和字符集排序規則用的。也就是說如果你建立資料庫指定預設字符集和排序規則,那麼後續建立的表如果沒有指定字符集和排序規則,那麼該新建的表將採用db.opt檔案中指定的屬性。
.frm
與表相關的後設資料資訊都存放在.frm檔案中,主要是表結構的定義資訊,不論什麼儲存引擎,每一個表都會有一個以表名命名的.frm檔案。
.MYD和.MYI
.MYD:MY Data,是MyISAM儲存引擎專用的用於存放MyISAM表的資料;
.MYI:MY Index,也是專屬於MyISAM儲存引擎的主要存放MyISAM表的索引相關資訊。
.ibd和.ibdata
兩者都是專屬於InnoDB儲存引擎的資料庫檔案。
當採用共享表空間時所有InnoDB表的資料均存放在.ibdata中,所以當表越來越多時,這個檔案會變得很大;
相對應的.ibd就是採用獨享表空間時InnoDB表的資料檔案。
修改為獨享表空間的方法是在my.ini配置檔案中新增/修改此條:
Innodb_file_per_table=1
注意:筆者所用的MySQL-5.7是預設獨享表空間的,不用特意在配置檔案中新增。
當然,就算開啟了獨享表空間,.ibdata檔案也會越來越大,因為這個檔案裡還儲存了:
變更緩衝區
雙寫緩衝區
撤銷日誌
這些東西究竟是啥玩意兒?我也不知道233
如果是MyISAM儲存引擎,直接拷貝.frm、.MYD、.MYI到新的庫資料夾下就行了,簡直方便快捷簡單易用。但現在MySQL在不配置的情況下預設的儲存引擎是InnoDB,說明它還是有優越性在的。具體兩者的差異有空另起一篇或者網上查查資料吧,三言兩語說不清楚,這裡就不展開了。
當然,能點進這篇部落格的肯定是想看InnoDB表的資料恢復,尤其是丟失了.ibdata檔案的情況下。
一、恢復表結構
首要的一件事情就是恢復表結構,如果很幸運地保留了當時的表結構,此步可跳過。
1.1 隨意建立一張同名表
CREATE TABLE weibo_tweets(a int)ENGINE=InnoDB;
1
1.2 關閉mysql服務
net stop mysql
1.3 複製備份的.frm覆蓋新建的表.frm
1.4 開啟mysql服務
net start mysql
1.5 在mysql安裝目錄data資料夾下用文字編輯器開啟.err檔案
這是mysql的錯誤日誌,找到諸如
2018-01-09T08:19:46.170814Z 3 [Warning] InnoDB: Table data_rec/weibo_tweets contains 1 user defined columns in InnoDB, but 6 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
的記錄,發現原表擁有6個欄位。
1.6 刪除當前表,新建一張擁有6個欄位的同名表
mysql> DROP TABLE weibo_tweets;
Query OK, 0 rows affected (0.26 sec)
mysql>CREATE TABLE weibo_tweets(a1 int,a2 int,a3 int,a4 int,a5 int,a6 int)ENGINE=InnoDB;
Query OK, 0 rows affected (0.66 sec)
1.7 重複步驟1.2-1.3
修改配置檔案my.ini在[mysqld]下新增/修改innodb_force_recovery=6
1.8 啟動mysql服務,檢視錶結構,發現表結構已經恢復
mysql> desc weibo_tweets;
±------------±--------------±-----±----±------------------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------------±--------------±-----±----±------------------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| uid | varchar(10) | NO | | NULL | |
| content | varchar(1000) | YES | | NULL | |
| pub_time | varchar(20) | YES | | NULL | |
| tool | varchar(50) | YES | | NULL | |
| create_time | datetime | YES | | CURRENT_TIMESTAMP | |
±------------±--------------±-----±----±------------------±---------------+
6 rows in set, 1 warning (0.01 sec)
匯出表結構,在命令提示符下輸入
mysqldump -uroot -proot data_rec weibo_twets > e:\tweets.sql
在.sql檔案中找到建表語句。
或者也可以用資料庫管理軟體如navicat中找到這張表,在物件資訊中複製下DDL選項卡里的內容。
1.9 停止mysql服務,修改配置檔案my.ini
修改innodb_force_recovery=0或者直接註釋掉。
2.0 啟動mysql服務,刪掉這張表,用獲得的建表語句新建表
至此,表結構已經完全恢復。
二、恢復表資料
2.1 分離表空間
使當前.ibd的資料檔案和.frm分離。
ALTER TABLE weibo_tweets DISCARD TABLESPACE;
2.2 複製備份的.ibd檔案覆蓋新的表資料
2.3 重新建立新的連線
ALTER TABLE weibo_tweets IMPORT TABLESPACE;
至此,資料恢復完畢。
相關文章
- mysql 透過idb 恢復檔案MySql
- 資料恢復新姿勢——通過ibd和frm檔案恢復資料資料恢復
- 雲伺服器恢復MySQL frm資料檔案伺服器MySql
- Mysql通過ibd檔案恢復資料的步驟詳解MySql
- MySQL 通過 binlog 恢復資料MySql
- Mysql5.7利用frm與ibd恢復資料MySql
- mysql 從 frm 檔案恢復 table 表結構的3種方法MySql
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 通過duplicat恢復資料庫資料庫
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- 【資料庫資料恢復】EXT3檔案系統下MYSQL資料庫恢復案例資料庫資料恢復MySql
- MySQL 透過 binlog 恢復資料MySql
- Linux上透過binlog檔案恢復mysql資料庫詳細步驟LinuxMySql資料庫
- 【Mysql】如何透過binlog恢復資料MySql
- 【伺服器資料恢復】StorNext檔案系統下raid5資料恢復過程伺服器資料恢復AI
- 【伺服器資料恢復】linux ext3檔案系統下mysql資料庫資料恢復案例伺服器資料恢復LinuxMySql資料庫
- MySQL資料災難挽救之ibdata檔案誤刪恢復MySql
- 【伺服器資料恢復】StorNext檔案系統資料恢復案例伺服器資料恢復
- mysql資料恢復MySql資料恢復
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- 【儲存資料恢復】WAFL檔案系統下raid資料恢復案例資料恢復AI
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- MySQL通過bin log日誌恢復資料|手撕MySQL|對線面試官MySql面試
- 電腦檔案丟失資料恢復資料恢復
- 【伺服器資料恢復】linux ext3檔案系統下誤刪除mysql資料庫的資料恢復案例伺服器資料恢復LinuxMySql資料庫
- MSSQL資料庫資料恢復案例:ndf檔案大小變為0KB恢復資料SQL資料庫資料恢復
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 【資料庫資料恢復】mdb_catalog.wt檔案丟失的MongoDB資料恢復案例資料庫資料恢復MongoDB
- 【伺服器資料恢復】xfs檔案系統資料丟失的資料恢復案例伺服器資料恢復
- 資料庫資料恢復-SQL SERVER資料庫檔案大小變為“0”的資料恢復方案資料庫資料恢復SQLServer
- Linux伺服器資料恢復案例;ocfs2檔案系統資料恢復Linux伺服器資料恢復
- MySQL恢復過程MySql
- SQL SEVER 缺少LOG檔案資料庫恢復SQL資料庫
- 怎樣恢復Mac檔案及資料夾資料?BackupLoupe for mac(資料恢復備份助手)3.5.4Mac資料恢復
- 資料庫資料恢復—MongoDB資料庫檔案丟失,啟動報錯的資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- mysql 5.7 刪除ibdata1 、ib_logfile 檔案的資料恢復MySql資料恢復