五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > Mysql數(shù)據(jù)庫(innodb)損壞,通過idb和frm恢復(fù)表結(jié)構(gòu)和數(shù)據(jù)的方法

Mysql數(shù)據(jù)庫(innodb)損壞,通過idb和frm恢復(fù)表結(jié)構(gòu)和數(shù)據(jù)的方法

文章來源:365jz.com     點擊數(shù):1617    更新時間:2019-11-12 21:18   參與評論

我們知道MySQL中如果用的是MYISAM數(shù)據(jù)引擎,那么數(shù)據(jù)很好恢復(fù),只要將相應(yīng).frm, .MYD, .MYI文件拷貝過去即可。但是如果是innodb的話,如果開啟innodb_file_per_table=1,則每一個數(shù)據(jù)表都是一個單獨的文件,比如User表,則會建立User.frm和User.ibd.


那么直接拷貝這兩個文件到新的MySQL數(shù)據(jù)目錄下可以嗎,一般來說是不行的,那么什么時候可以呢?只有在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才可以。


那么怎么辦呢?根據(jù)之前講的,innodb恢復(fù)不了就是因為table space id不匹配導(dǎo)致的。所以我們可以這樣做 (以zhc_db數(shù)據(jù)庫為例):


1 首先將當(dāng)前mysql數(shù)據(jù)目錄下的ibdata1文件和zhc_db下邊的frm和ibd文件備份。


2 將之前要恢復(fù)的ibdata1和frm和ibd文件拷貝到當(dāng)前的mysql數(shù)據(jù)目錄下,進行覆蓋。注意因為當(dāng)前數(shù)據(jù)庫可能還有其它數(shù)據(jù)庫和表,所以這一步可能導(dǎo)致其它數(shù)據(jù)庫出現(xiàn)問題。不過沒關(guān)系,因為我們已經(jīng)備份了。


3 保險起見,重啟一下mysql吧,service mysql restart


4 直接登錄到zhc_db數(shù)據(jù)庫,mysql -u root -p zhc_db; 這時候你就可以show tables和select了,激動了吧,看到你的數(shù)據(jù)了吧。


5 將此數(shù)據(jù)庫用mysqldump導(dǎo)出,mysqldump -u root -p[password] zhc_db > dump_zhc_db.sql


好了,你已經(jīng)有了以前的數(shù)據(jù)和表定義。


6 最后一步,別忘了,將ibdata1文件和zhc_db下邊的文件用之前的備份進行恢復(fù)。


7 重啟mysql,然后你就可以將你的數(shù)據(jù)進行導(dǎo)入了。注意目錄的權(quán)限一定是MySQL可讀寫的。


.frm恢復(fù)表結(jié)構(gòu)


溫馨提示:如果你已經(jīng)恢復(fù)了表數(shù)據(jù),可以直接忽略此操作,開始下一步操作


MySql創(chuàng)建每張表后都會在“mysql安裝目錄/data/數(shù)據(jù)庫名/”目錄下創(chuàng)建一個“表名.frm”文件。


該.frm文件并不能直接打開,但是它可以幫助你恢復(fù)你的表結(jié)構(gòu)~~


具體操作如下:


1、準(zhǔn)備恢復(fù)bhusk數(shù)據(jù)庫中的表結(jié)構(gòu),其中bhusk數(shù)據(jù)庫中包含了admin表。


2、我們首先連接數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫bhusk,自己可視化工具或許會快一點

create database bhusk;


3、然后在該數(shù)據(jù)庫下創(chuàng)建表admin ,只需要包含一個簡單的字段便可,主要是創(chuàng)建出一個同名的表,方便接下來的替換。

create table `admin`( id varchar(32) not null);


4、這一步請將mysql數(shù)據(jù)庫服務(wù)關(guān)閉


5、將之前舊的數(shù)據(jù)庫留下來的/data/bhusk/admin.frm文件覆蓋掉現(xiàn)在新的數(shù)據(jù)庫/data/bhusk目錄下的admin.frm文件。


6、給這個admin.frm加權(quán)限,所有者mysql ,權(quán)限660(你可以參考別的ibd文件所有者和權(quán)限設(shè)置) (這一步幾乎可以忽略)此步為linux權(quán)限操作


7、最后啟動數(shù)據(jù)庫,可以查表結(jié)構(gòu)了


.idb恢復(fù)表數(shù)據(jù)


1、 現(xiàn)在admin表結(jié)構(gòu)有了,開始準(zhǔn)備恢復(fù)數(shù)據(jù),如果通過以上方法恢復(fù)表結(jié)構(gòu),那一定在/data/bhusk/目錄下會有admin.idb文件。


2、接下來執(zhí)行alter table `admin` discard tablespace ;執(zhí)行完之后,數(shù)據(jù)庫目錄下的user.ibd文件就沒了


3、把你備份的ibd放到消失的admin.ibd文件那里。


4、給這個文件加權(quán)限,所有者mysql ,權(quán)限660(你可以參考別的ibd文件所有者和權(quán)限設(shè)置)(這一步幾乎可以忽略)此步為linux權(quán)限操作


5、執(zhí)行 alter table admin import tablespace; 執(zhí)行完,表數(shù)據(jù)就可讀了,這時候會丟失一些諸如表行記錄數(shù)等存在系統(tǒng)表里的信息,不過那些信息無所謂。表其實這時候已經(jīng)可以正常用了。如果不放心,可以導(dǎo)出sql語句或txt,再創(chuàng)建表導(dǎo)入。

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答?。?點擊進入論壇

發(fā)表評論 (1617人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號