新聞中心
深入了解數(shù)據(jù)庫中的ibd

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、尼元陽網(wǎng)絡(luò)推廣、小程序定制開發(fā)、尼元陽網(wǎng)絡(luò)營(yíng)銷、尼元陽企業(yè)策劃、尼元陽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供尼元陽建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
在日常生活中,我們常常需要使用各種各樣的軟件來存儲(chǔ)、管理和處理大量的數(shù)據(jù)。而數(shù)據(jù)庫就是其中一個(gè)重要的工具,它通過定義結(jié)構(gòu)化的數(shù)據(jù)模型,可以幫助我們高效地管理和查詢數(shù)據(jù)。在數(shù)據(jù)庫中,每個(gè)表都會(huì)對(duì)應(yīng)一個(gè)或多個(gè)數(shù)據(jù)文件,其中最常見的就是 ibd 文件。那么,什么是 ibd 文件?如何深入了解它們呢?本文將對(duì)此進(jìn)行介紹。
一、ibd 文件的概述
在 InnoDB 存儲(chǔ)引擎中,ibd 是一種獨(dú)立存儲(chǔ)的文件類型,它專門用來存儲(chǔ)表的數(shù)據(jù)和索引信息。每個(gè) ibd 文件都對(duì)應(yīng)一個(gè)表,而且可以存儲(chǔ)多個(gè)表空間。一個(gè)表空間是一個(gè)數(shù)據(jù)文件,它可以存儲(chǔ)一個(gè)或多個(gè)表的數(shù)據(jù)和索引。
在 InnoDB 中,每個(gè)表都有一個(gè)獨(dú)立的 ibd 文件,這個(gè)文件的名稱與表的名稱保持一致。例如,在一個(gè)名為 mydb 的數(shù)據(jù)庫中,有一個(gè)名為 mytable 的表,那么該表對(duì)應(yīng)的 ibd 文件就是 mytable.ibd。當(dāng)我們?cè)跀?shù)據(jù)庫中創(chuàng)建表時(shí),實(shí)際上是在磁盤上創(chuàng)建了一個(gè) ibd 文件。
二、ibd 文件的組成
ibd 文件一般由多個(gè)頁(page)組成,頁是存儲(chǔ)數(shù)據(jù)的最小單位。每個(gè)頁的大小是固定的,一般為 16KB。InnoDB 存儲(chǔ)引擎中的文件和頁的管理采用了類似于文件系統(tǒng)的方式。文件和頁被組織成一個(gè)多層的樹形結(jié)構(gòu),這個(gè)結(jié)構(gòu)被稱為 B+ 樹。
在 B+ 樹中,每個(gè)葉子節(jié)點(diǎn)都對(duì)應(yīng)著一個(gè)存儲(chǔ)表記錄的數(shù)據(jù)頁,數(shù)據(jù)頁可以包含多個(gè)記錄。而非葉子節(jié)點(diǎn)則存儲(chǔ)著索引信息,例如節(jié)點(diǎn)的鍵值范圍和指向下一級(jí)節(jié)點(diǎn)的指針。這種 B+ 樹的結(jié)構(gòu)可以有效地提高數(shù)據(jù)的查詢效率,并且支持高并發(fā)的工作負(fù)載。
三、ibd 文件的使用方式
在使用 ibd 文件時(shí),我們需要注意以下幾點(diǎn):
1. 對(duì)于 InnoDB 存儲(chǔ)引擎而言,ibd 文件是不可或缺的,因?yàn)樗吮淼乃袛?shù)據(jù)和索引信息,如果 ibd 文件損壞,則數(shù)據(jù)庫中的數(shù)據(jù)可能會(huì)完全丟失。
2. 在進(jìn)行 MySQL 主從同步時(shí),如果 ibd 文件沒有同步到從服務(wù)器上,那么從服務(wù)器將無法獲取完整的數(shù)據(jù),因此ibd 文件的同步非常重要。
3. 在 InnoDB 存儲(chǔ)引擎中,每個(gè)表都應(yīng)該只有一個(gè) ibd 文件,多個(gè) ibd 文件會(huì)影響數(shù)據(jù)庫的性能。
4. 為避免出現(xiàn) ibd 文件損壞的情況,我們可以定期備份 ibd 文件,并在進(jìn)行數(shù)據(jù)操作前進(jìn)行數(shù)據(jù)備份。
四、處理 ibd 文件的常見問題
在使用 ibd 文件的過程中,可能會(huì)遇到一些常見問題,本文對(duì)其進(jìn)行了:
1. ibd 文件損壞:ibd 文件一旦被損壞,就會(huì)導(dǎo)致數(shù)據(jù)庫無法正常訪問。出現(xiàn)這種情況時(shí),我們可以嘗試使用 InnoDB 的修復(fù)工具進(jìn)行修復(fù)。
2. ibd 文件刪除:刪除 ibd 文件時(shí)需要謹(jǐn)慎操作,因?yàn)檫@可能會(huì)導(dǎo)致數(shù)據(jù)庫中的數(shù)據(jù)丟失。
3. ibd 文件太大:如果 ibd 文件太大,可能會(huì)導(dǎo)致數(shù)據(jù)庫性能下降。此時(shí),我們可以嘗試使用數(shù)據(jù)壓縮等方式來減小文件的大小。
四、結(jié)語
通過本文的介紹,我們可以更深入地了解數(shù)據(jù)庫中的 ibd 文件。在實(shí)際操作中,我們需要注意 ibd 文件的管理和備份,避免出現(xiàn)文件損壞或數(shù)據(jù)丟失等情況。同時(shí),針對(duì)常見的問題,我們可以采取一些對(duì)策來保障數(shù)據(jù)庫的正常運(yùn)行。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220MYSQL怎么樣能讀取.ibd文件中的數(shù)據(jù)
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個(gè)myisamchk, isamchk數(shù)據(jù)檢測(cè)恢復(fù)工具。前者使用起來比較簡(jiǎn)便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說Status是OK,則不用修復(fù),如果有Error,可以用:
repair table tabTest;
進(jìn)行修復(fù),修復(fù)之后可以在用check table命令來進(jìn)行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)棗絕據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進(jìn)行說明。當(dāng)發(fā)現(xiàn)某個(gè)數(shù)據(jù)表出現(xiàn)問題時(shí)可以使用:
myisamchk tablename.MYI
進(jìn)行檢測(cè),如果需要修復(fù)的話,凳粗姿可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細(xì)參數(shù)說明,可以參見它的使用幫助。需要注意的時(shí)在進(jìn)行修改時(shí)必須確保MySQL服務(wù)器沒有訪問這個(gè)數(shù)據(jù)表,保險(xiǎn)的情況下是更好在進(jìn)行檢測(cè)時(shí)把MySQL服務(wù)器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面啟動(dòng)MySQL服務(wù)器前:
&& /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對(duì)于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對(duì)于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己凳慎的實(shí)際情況進(jìn)行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。
需要注意的時(shí),如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時(shí)MySQL服務(wù)器必須沒有啟動(dòng)!檢測(cè)修復(fù)所有數(shù)據(jù)庫(表)
在 InnoDB 中,用戶定義的表悉猜及其對(duì)應(yīng)的索引數(shù)據(jù)存儲(chǔ)在擴(kuò)展名為 .ibd 的文件中。表空間有兩種類型,常規(guī)(或共享)表空間和每表獨(dú)立表空間。對(duì)睜蠢型于共享表空間,來自許多不同表及其對(duì)應(yīng)索引的數(shù)據(jù)可以駐留在單個(gè)檔搭 .ibd 文件中。而對(duì)于每表獨(dú)立表空間,單個(gè)表的數(shù)據(jù)及其索引位于一個(gè) .ibd 文件中。
. IBD 文件這些文件通常位于數(shù)據(jù)目錄中。讓我們嘗試創(chuàng)建一個(gè)表 test.t1。
mysql>CREATE TABLE test.t1 (c INT) engine=InnoDB;
$ cd /test
$ ls
t1.ibd
上面是獨(dú)立表空間文件,即與表 t1 相關(guān)的表和索引數(shù)據(jù)將駐留在此文件中。
如何從ibd文件中恢復(fù)數(shù)據(jù)
參考:
網(wǎng)頁鏈接
在mysql中由于某種原因保存有ibd文件,但是表已經(jīng)被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下,通過mysql自身技術(shù)即可完成ibd文件恢復(fù).
測(cè)試環(huán)境mysql版本
mysql> select version();++| version() |++| 5.6.25 |++1 row in set (0.00 sec)
mysql主要參數(shù)
mysql> show variables like ‘innodb_file_per_table’;+++| Variable_name| Value |+++| innodb_file_per_table | ON |+++1 row in set (0.00 sec)mysql> show variables like ‘innodb_force_recovery’;+++| Variable_name| Value |+++| innodb_force_recovery ||+++1 row in set (0.00 sec)
innodb_file_per_table這個(gè)握鄭橡參數(shù)為on才能夠?qū)崿F(xiàn)每個(gè)表存儲(chǔ)單獨(dú)的ibd文件.innodb_force_recovery參數(shù)默認(rèn)范圍0
測(cè)試表情況
mysql> use xifenfei;Database changedmysql> show tables;+-+| Tables_in_xifenfei|+-+| user_login |+-+1 rows in set (0.00 sec) mysql> select count(*) from user_login;++| count(*) |++||++1 row in set (0.02 sec) mysql>叢慎 desc user_login;+++——+—–+++| Field | Type| Null | Key | Default | Extra |+++——+—–+++| ID| varchar(255) | NO 段旁 | PRI | NULL ||| ACCOUNT | varchar(255) | YES | | NULL ||| LifeCycle | int(11) | YES | | NULL ||| Name| varchar(255) | YES | | NULL ||| Password | varchar(255) | YES | | NULL ||| Role| varchar(255) | YES | | NULL ||| UTime | varchar(255) | YES | | NULL ||| UserID | varchar(255) | YES | | NULL ||| UserName | varchar(255) | YES | | NULL ||| UserStatus | int(11) | YES | | NULL ||+++——+—–+++10 rows in set (0.05 sec) mysql> select * from user_login limit 1;+——++++——+——++——+++| ID | ACCOUNT | LifeCycle | Name | Password| Role | UTime | UserID| UserName | UserStatus |+——++++——+——++——+++| 010d6c85a76c44cba80d07cbd8590bb2 | hyh || 胡元會(huì) | 698d51a19d8a121ce581499d7b| |6| |:04:32 | 0fe3bc4dda4b85065ed5cfee8 | NULL ||+——++++——+——++——+++1 row in set (0.00 sec) mysql> show create table user_login \G;*************************** 1. row *************Table: user_loginCreate Table: CREATE TABLE `user_login` ( `ID` varchar(255) NOT NULL, `ACCOUNT` varchar(255) DEFAULT NULL, `LifeCycle` int(11) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, `Password` varchar(255) DEFAULT NULL, `Role` varchar(255) DEFAULT NULL, `UTime` varchar(255) DEFAULT NULL, `UserID` varchar(255) DEFAULT NULL, `UserName` varchar(255) DEFAULT NULL, `UserStatus` int(11) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec) mysql> show variables like ‘datadir’;+-+—–+| Variable_name | Value|+-+—–+| datadir| D:\xifenfei\mysql-5.6.25-winx64\data\ |+-+—–+1 row in set (0.00 sec)
備份ibd文件
C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄0:98,304 user_login.ibd 1 個(gè)文件,304 字節(jié) 0 個(gè)目錄 78,789,591,040 可用字節(jié)C:\Users\XIFENFEI>cp D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd d:/C:\Users\XIFENFEI>dir d:\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 d:\ 的目錄3:98,304 user_login.ibd 1 個(gè)文件,304 字節(jié) 0 個(gè)目錄 78,789,591,040 可用字節(jié)
模擬刪除表(ibd文件也被刪除)
mysql> drop table xifenfei.user_login;Query OK, 0 rows affected (0.03 sec) C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄 找不到文件
創(chuàng)建新表
mysql> CREATE TABLE `user_login` ( -> `ID` varchar(255) NOT NULL, -> `ACCOUNT` varchar(255) DEFAULT NULL, -> `LifeCycle` int(11) DEFAULT NULL, -> `Name` varchar(255) DEFAULT NULL, -> `Password` varchar(255) DEFAULT NULL, -> `Role` varchar(255) DEFAULT NULL, -> `UTime` varchar(255) DEFAULT NULL, -> `UserID` varchar(255) DEFAULT NULL, -> `UserName` varchar(255) DEFAULT NULL, -> `UserStatus` int(11) DEFAULT NULL, -> PRIMARY KEY (`ID`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.03 sec) C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄3:98,304 user_login.ibd 1 個(gè)文件,304 字節(jié) 0 個(gè)目錄 78,789,591,040 可用字節(jié) mysql> select count(*) from xifenfei.user_login;++| count(*) |++||++1 row in set (0.00 sec)
停掉mysql,替換user_login.ibd
C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄3:98,304 user_login.ibd 1 個(gè)文件,304 字節(jié) 0 個(gè)目錄 78,787,141,632 可用字節(jié) C:\Users\XIFENFEI>cp d:\user_login.ibd D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibdC:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd 驅(qū)動(dòng)器 D 中的卷沒有標(biāo)簽。 卷的序列號(hào)是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄0:98,304 user_login.ibd 1 個(gè)文件,304 字節(jié) 0 個(gè)目錄 78,787,141,632 可用字節(jié)
啟動(dòng)mysql 服務(wù),查詢數(shù)據(jù)庫
mysql> select count(*) from xifenfei.user_login;ERROR 2023 (HY000): Lost connection to MySQL server during querymysql> exitBye C:\Users\XIFENFEI>mysql -urootERROR 2023 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
mysql 日志報(bào)錯(cuò)
:31: MySQL: ready for connections.Version: ‘5.6.25’ socket: ” port:MySQL Community Server (GPL)InnoDB: Error: tablespace id is 56 in the data dictionaryInnoDB: but in file .\xifenfei\user_login.ibd it is 47!:31:31 2eb8 InnoDB: Assertion failure in threadin file fil0fil.cc line 796InnoDB: We intentionally generate a memory trap.InnoDB: Submit a detailed bug report to If you get repeated assertion failures or crashes, evenInnoDB: immediately after the mysqld startup, there may be
很明顯由于替換的ibd文件和現(xiàn)在數(shù)據(jù)庫記錄的ibd文件的page的字典信息不匹配,因?yàn)閿?shù)據(jù)庫無法正常查詢?cè)摂?shù)據(jù),而且mysql為了安全直接把實(shí)例給crash了.
恢復(fù)操作
mysql> show variables like ‘innodb_force_recovery’;+++| Variable_name| Value |+++| innodb_force_recovery ||+++1 row in set (0.00 sec)mysql> alter table xifenfei.user_login discard tablespace;Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql> alter table xifenfei.user_login import tablespace;Query OK, 0 rows affected, 1 warning (0.06 sec) mysql> select count(*) from xifenfei.user_login;++| count(*) |++||++1 row in set (0.00 sec) mysql> select * from xifenfei.user_login limit 1;+——++++——+——++——+++| ID | ACCOUNT | LifeCycle | Name | Password| Role | UTime | UserID| UserName | UserStatus |+——++++——+——++——+++| 010d6c85a76c44cba80d07cbd8590bb2 | hyh || 胡元會(huì) | 698d51a19d8a121ce581499d7b| |6| |:04:32 | 0fe3bc4dda4b85065ed5cfee8 | NULL ||+——++++——+——++——+++1 row in set (0.00 sec)
通過mysql自帶的discard tablespace和import tablespace操作后,表數(shù)據(jù)已經(jīng)可以完成查詢了.
mysql日志
:34: InnoDB: Failed to find tablespace for table ‘”xifenfei”.”user_login”‘ in the cache. Attempting to load the tablespace with space id 56.:34: InnoDB: In file ‘.\xifenfei\user_login.ibd’, tablespace id and flags are 47 and 0, but in the InnoDB data dictionary they are 56 and 0. Have you moved InnoDB .ibd files around without using the commands DISCARD TABLESPACE and IMPORT TABLESPACE? Please refer to for how to resolve the issue.:34: InnoDB: Could not find a valid tablespace file for ‘xifenfei/user_login’. See for how to resolve the issue.:34:08 30e8 InnoDB: cannot calculate statistics for table “xifenfei”.”user_login” because the .ibd file is missing. For help, please refer to 23:34: InnoDB: Cannot delete tablespace 56 because it is not found in the tablespace memory cache.:34: InnoDB: Cannot delete tablespace 56 in DISCARD TABLESPACE. Tablespace not found:34: InnoDB: Sync to disk:34: InnoDB: Sync to disk – done!:34: InnoDB: Phase I – Update all pages:34: InnoDB: Sync to disk:34: InnoDB: Sync to disk – done!:34: InnoDB: Tablespace ‘xifenfei/user_login’ exists in the cache with id 47 !=23:34: InnoDB: Freeing existing tablespace ‘xifenfei/user_login’ entry from the cache with id23:34: InnoDB: Phase III – Flush changes to disk:34: InnoDB: Phase IV – Flush complete
mysql日志依舊報(bào)了page字典信息不匹配.但是數(shù)據(jù)已經(jīng)可以訪問,通過mysqldump導(dǎo)出重新創(chuàng)建表即可.如果由于ibd損壞使用該方法無法恢復(fù),請(qǐng)參考:MySQL drop database恢復(fù)(恢復(fù)方法同樣適用MySQL drop table,delete,truncate table)
在使用獨(dú)立表空間的情況下,如果不慎使得innodb存儲(chǔ)引擎的元數(shù)據(jù)文件ibdata損壞,我們還可以挽救寶貴的數(shù)據(jù).因?yàn)樵趇nnodb使用獨(dú)立表空間的情況下,ibdata文件會(huì)記錄每個(gè)innodb表的id,只要使得ibd中的表id和ibdata文件中記錄的表id相同,就能啟輪夠打開表,讀取到數(shù)據(jù).
#創(chuàng)建表
CREATE TABLE `ibdtest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fid` int(11) NOT NULL COMMENT ‘表b中的id’,
`content` char(255) NOT NULL COMMENT ‘操作內(nèi)容,系統(tǒng)歷喚生成’,
`mark` char(255) NOT NULL COMMENT ‘備注’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
#添加數(shù)據(jù)
INSERT ibdtest (fid,content,mark) VALUES (1,’1′,’1′),(2,’2′,’2′);
SELECT * FROM ibdtest;
關(guān)閉MySQL將ibdtest.ibd copy出來,放悄爛信到其他數(shù)據(jù)庫中來模擬災(zāi)難.
#/opt/soft/mysql/bin/mysqladmin -pshutdown
:31:50 mysqld_safe mysqld from pidfile /opt/soft/mysql/60137.localdomain.pid ended
+ Done /opt/soft/mysql/bin/mysqld_safe–defaults-file=/opt/soft/mysql/config/my.cnf –user=mysql
# cd /home/soft/mysql/data/test/
# ll
total 1296
-rw-rw—-. 1 mysql mysqlJan 18 00:06 a.frm
-rw-rw—-. 1 mysql mysqlJan 18 00:24 a.ibd
-rw-rw—-. 1 mysql mysqlJan 30 08:34 area.frm
-rw-rw—-. 1 mysql mysqlJan 30 08:36 area.ibd
-rw-rw—-. 1 mysql mysqlJan 18 00:05 b.frm
-rw-rw—-. 1 mysql mysqlJan 18 00:08 b.ibd
-rw-rw—-. 1 mysql mysqlJan 30 18:27 ibdtest.frm
-rw-rw—-. 1 mysql mysqlJan 30 18:28 ibdtest.ibd
-rw-rw—-. 1 mysql mysqlJan 6 16:23 testa.frm
-rw-rw—-. 1 mysql mysqlJan 10 04:10 testa.ibd
-rw-rw—-. 1 mysql mysqlJan 30 14:30 testmc.frm
-rw-rw—-. 1 mysql mysqlJan 30 14:30 testmc.ibd
-rw-rw—-. 1 mysql mysqlJan 30 13:54 testme.frm
-rw-rw—-. 1 mysql mysqlJan 30 13:55 testme.ibd
-rw-rw—-. 1 mysql mysqlJan 30 14:40 testmm.frm
-rw-rw—-. 1 mysql mysqlJan 30 14:45 testmm.ibd
-rw-rw—-. 1 mysql mysqlJan 30 13:40 testmu.frm
-rw-rw—-. 1 mysql mysqlJan 30 13:40 testmu.ibd
-rw-rw—-. 1 mysql mysqlJan 30 11:08 testmv.frm
-rw-rw—-. 1 mysql mysqlJan 30 11:10 testmv.ibd
-rw-rw—-. 1 mysql mysqlJan 4 21:55 testuser.frm
-rw-rw—-. 1 mysql mysqlJan 4 22:04 testuser.ibd
-rw-rw—-. 1 mysql mysqlJan 14 21:55 user.frm
-rw-rw—-. 1 mysql mysqlJan 14 21:55 user.ibd
# cp ibdtest.ibd /home/download/
# cd /home/download/
#vim打開ibd,使用16進(jìn)制查看
# vim -b ibdtest.ibd
:%!xxd
從下圖中能看到 此表在 當(dāng)前mysql數(shù)據(jù)庫中的id為0x10,即16.
此時(shí),我們假設(shè)災(zāi)難發(fā)生,ibdata損壞…
只剩下了ibdtest.ibd文,我們跳轉(zhuǎn)到另一個(gè)mysql服務(wù)器上,用同樣的建表語句創(chuàng)建ibdtest表.
這時(shí)我們打開這個(gè)mysql服務(wù)器下的ibdtest.ibd看看:
這個(gè)表的id為0x16,即為22,那么,我們只需將原有的ibdtest.ibd表id修改為0x16即可.
出保存的時(shí)候一定要記得使用:%!xxd -r
退出保存.
并將修改好的文件覆蓋掉新的ibdtest.ibd即可,
此mysql服務(wù)器會(huì)認(rèn)為該表損毀,無法打開,沒關(guān)系,修改innodb_force_recovery = 6,
重啟mysql服務(wù):
Select下,就知道數(shù)據(jù)是否恢復(fù)了沒有:
此時(shí),無法執(zhí)行寫操作,應(yīng)盡快將數(shù)據(jù)dump出來,修改innodb_force_recovery = 0,重啟服務(wù),創(chuàng)建新表后,把數(shù)據(jù)倒回去就ok了.恢復(fù)數(shù)據(jù)就不演示了.
創(chuàng)建已經(jīng)丟失的表結(jié)構(gòu)
先要安裝 mysql-utilities。
// RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities
使用 mysqlfrm 從 .frm 文件里面找回建表語句。
// 分析一個(gè) .frm 文件生成建表的語句mysqlfrm –diagnostic /var/lib/mysql/test/t1.frm// 分析一個(gè)目錄下的全部.frm文件生成建表語句root@username:~# mysqlfrm –diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep “^CREATE TABLE” createtb.sql |wc -l124
可以看到一共生成了 124 個(gè)建表語句。
有很多時(shí)候也可以從其它庫里面生成建表語句,如同一個(gè)應(yīng)用的其它數(shù)據(jù)庫或不同的測(cè)試環(huán)境,采用下面的 mysqldump 生成建表語句:
mysqldump –no-data –compact my_db>createtb.sql
登錄 MySQL 生成表。
mysql> create database my_db;mysql> use my_dbDatabase changedmysql> source createtb.sqlQuery OK, 0 rows affected (0.07 sec)……
導(dǎo)入舊的數(shù)據(jù)文件
將新建的沒有包括數(shù)據(jù)的 .ibd 文件拋棄
root@username:/var/lib/mysql/my_db# ll *.ibd|wcroot@username:/var/lib/mysql/my_db# mysql -e “show tables from my_db” \| grep -v Tables_in_my_db \| while read a; do mysql -e “ALTER TABLE my_db.$a DISCARD TABLESPACE”; doneroot@username:/var/lib/mysql/my_db# ll *.ibd|wcls: cannot access ‘*.ibd’: No such file or directory000
可以看到所有的 .idb 文件都已經(jīng)被拋棄了。然后把舊的有數(shù)據(jù)的 .ibd 文件拷貝到這個(gè) my_db 目錄下面,別忘了把屬主改過來:chown mysql. *,再把這些數(shù)據(jù)文件 import 到數(shù)據(jù)庫中。
root@username:/var/lib/mysql/my_db# mysql -e “前畝show tables from my_db” \| grep -v Tables_in_my_db \| while read a; \do mysql -e “ALTER TABLE my_db.$a import TABLESPACE”襲叢; done
導(dǎo)入完成后檢拍悔櫻查表
使用 mysqlcheck 對(duì)數(shù)據(jù)庫 my_db 下的所有表進(jìn)行檢查:
root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_db.cdp_backup_point OK……
關(guān)于數(shù)據(jù)庫中的ibd是什么意思的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
當(dāng)前標(biāo)題:「深入了解數(shù)據(jù)庫中的ibd」(數(shù)據(jù)庫中的ibd是什么意思)
網(wǎng)址分享:http://m.5511xx.com/article/cdssego.html


咨詢
建站咨詢
