有時候運維人員會直接拷貝數據庫文件給咱們,這個時候就須要把數據還原到mysql中,注意mysql版本要對應(也能夠版本高一點),mysql所在的操做系統也注意最好同樣(有一次window的到linux的mysql,就有部分表沒法恢復),首先參考mysql數據儲存文件個格式,參考:mysql數據庫引擎和他們文件存儲介紹 。html
innodb_file_per_table=1 #由於是獨立表空間,這裏要設置成獨立表空間 innodb_force_recovery=1 #設置成1,好像是爲了保護表數據
2.建立新數據庫,建立要恢復表相同的表結構(表結構必須相同,表名稱最好也相同),若是能夠查看原來的表,可使用命令:show create table xxx;查看。
3.進入xxx表的數據存儲目錄,把xxx.ibd複製到~目錄下。
4.在mysql中執行alter table xxx discard tablespace; 進入xxx表的數據存儲目錄,查看xxx.ibd是否已經刪除,未刪除要手動刪除。
5.把要恢復的表的ibd文件複製到xxx表的數據存儲目錄(至關於替換原來的表的ibd文件),注意把文件的全部者賦給mysql。
6.使用命令:vim -b ~/xxx.ibd,輸入:%!xxd,將二進制轉換成16進制查看,查看第3行的數據,以下是tablespace id是2
0000020: 0000 0000 0002 0000 0002 0000 0000 0000
7.使用命令:vim -b /var/lib/mysql/test/xxx.ibd,輸入:%!xxd,把要恢復的xxx.id文件的這一行一樣改爲0002(有2個地方要改,第4列和第6列),改爲相同的tablespace id(若是tablespace id在2個.ibd文件中不同,不修改爲相同的話就會在/var/log/mysqld.log中報錯,說他們不同,在mysql命令行行是報engine -1什麼的錯誤),改完後輸入:%!xxd -r,將16進制轉換成2進制,再輸入:x或者:wq保存。
8.在mysql中執行alter table xxx import tablespace; 而後就能夠查看錶的數據了。
參考:MySQL 5.6.26 經過frm & ibd 恢復數據過程 MySQL ibdata損壞或丟失 經過frm&ibd文件恢復數據 mysql