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

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計、尼元陽網(wǎng)絡(luò)推廣、小程序定制開發(fā)、尼元陽網(wǎng)絡(luò)營銷、尼元陽企業(yè)策劃、尼元陽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供尼元陽建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
在日常生活中,我們常常需要使用各種各樣的軟件來存儲、管理和處理大量的數(shù)據(jù)。而數(shù)據(jù)庫就是其中一個重要的工具,它通過定義結(jié)構(gòu)化的數(shù)據(jù)模型,可以幫助我們高效地管理和查詢數(shù)據(jù)。在數(shù)據(jù)庫中,每個表都會對應(yīng)一個或多個數(shù)據(jù)文件,其中最常見的就是 ibd 文件。那么,什么是 ibd 文件?如何深入了解它們呢?本文將對此進行介紹。
一、ibd 文件的概述
在 InnoDB 存儲引擎中,ibd 是一種獨立存儲的文件類型,它專門用來存儲表的數(shù)據(jù)和索引信息。每個 ibd 文件都對應(yīng)一個表,而且可以存儲多個表空間。一個表空間是一個數(shù)據(jù)文件,它可以存儲一個或多個表的數(shù)據(jù)和索引。
在 InnoDB 中,每個表都有一個獨立的 ibd 文件,這個文件的名稱與表的名稱保持一致。例如,在一個名為 mydb 的數(shù)據(jù)庫中,有一個名為 mytable 的表,那么該表對應(yīng)的 ibd 文件就是 mytable.ibd。當(dāng)我們在數(shù)據(jù)庫中創(chuàng)建表時,實際上是在磁盤上創(chuàng)建了一個 ibd 文件。
二、ibd 文件的組成
ibd 文件一般由多個頁(page)組成,頁是存儲數(shù)據(jù)的最小單位。每個頁的大小是固定的,一般為 16KB。InnoDB 存儲引擎中的文件和頁的管理采用了類似于文件系統(tǒng)的方式。文件和頁被組織成一個多層的樹形結(jié)構(gòu),這個結(jié)構(gòu)被稱為 B+ 樹。
在 B+ 樹中,每個葉子節(jié)點都對應(yīng)著一個存儲表記錄的數(shù)據(jù)頁,數(shù)據(jù)頁可以包含多個記錄。而非葉子節(jié)點則存儲著索引信息,例如節(jié)點的鍵值范圍和指向下一級節(jié)點的指針。這種 B+ 樹的結(jié)構(gòu)可以有效地提高數(shù)據(jù)的查詢效率,并且支持高并發(fā)的工作負(fù)載。
三、ibd 文件的使用方式
在使用 ibd 文件時,我們需要注意以下幾點:
1. 對于 InnoDB 存儲引擎而言,ibd 文件是不可或缺的,因為它包含了表的所有數(shù)據(jù)和索引信息,如果 ibd 文件損壞,則數(shù)據(jù)庫中的數(shù)據(jù)可能會完全丟失。
2. 在進行 MySQL 主從同步時,如果 ibd 文件沒有同步到從服務(wù)器上,那么從服務(wù)器將無法獲取完整的數(shù)據(jù),因此ibd 文件的同步非常重要。
3. 在 InnoDB 存儲引擎中,每個表都應(yīng)該只有一個 ibd 文件,多個 ibd 文件會影響數(shù)據(jù)庫的性能。
4. 為避免出現(xiàn) ibd 文件損壞的情況,我們可以定期備份 ibd 文件,并在進行數(shù)據(jù)操作前進行數(shù)據(jù)備份。
四、處理 ibd 文件的常見問題
在使用 ibd 文件的過程中,可能會遇到一些常見問題,本文對其進行了:
1. ibd 文件損壞:ibd 文件一旦被損壞,就會導(dǎo)致數(shù)據(jù)庫無法正常訪問。出現(xiàn)這種情況時,我們可以嘗試使用 InnoDB 的修復(fù)工具進行修復(fù)。
2. ibd 文件刪除:刪除 ibd 文件時需要謹(jǐn)慎操作,因為這可能會導(dǎo)致數(shù)據(jù)庫中的數(shù)據(jù)丟失。
3. ibd 文件太大:如果 ibd 文件太大,可能會導(dǎo)致數(shù)據(jù)庫性能下降。此時,我們可以嘗試使用數(shù)據(jù)壓縮等方式來減小文件的大小。
四、結(jié)語
通過本文的介紹,我們可以更深入地了解數(shù)據(jù)庫中的 ibd 文件。在實際操作中,我們需要注意 ibd 文件的管理和備份,避免出現(xiàn)文件損壞或數(shù)據(jù)丟失等情況。同時,針對常見的問題,我們可以采取一些對策來保障數(shù)據(jù)庫的正常運行。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220MYSQL怎么樣能讀取.ibd文件中的數(shù)據(jù)
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數(shù)據(jù)檢測恢復(fù)工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說Status是OK,則不用修復(fù),如果有Error,可以用:
repair table tabTest;
進行修復(fù),修復(fù)之后可以在用check table命令來進行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)棗絕據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進行說明。當(dāng)發(fā)現(xiàn)某個數(shù)據(jù)表出現(xiàn)問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復(fù)的話,凳粗姿可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細(xì)參數(shù)說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務(wù)器沒有訪問這個數(shù)據(jù)表,保險的情況下是更好在進行檢測時把MySQL服務(wù)器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面啟動MySQL服務(wù)器前:
&& /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己凳慎的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時MySQL服務(wù)器必須沒有啟動!檢測修復(fù)所有數(shù)據(jù)庫(表)
在 InnoDB 中,用戶定義的表悉猜及其對應(yīng)的索引數(shù)據(jù)存儲在擴展名為 .ibd 的文件中。表空間有兩種類型,常規(guī)(或共享)表空間和每表獨立表空間。對睜蠢型于共享表空間,來自許多不同表及其對應(yīng)索引的數(shù)據(jù)可以駐留在單個檔搭 .ibd 文件中。而對于每表獨立表空間,單個表的數(shù)據(jù)及其索引位于一個 .ibd 文件中。
. IBD 文件這些文件通常位于數(shù)據(jù)目錄中。讓我們嘗試創(chuàng)建一個表 test.t1。
mysql>CREATE TABLE test.t1 (c INT) engine=InnoDB;
$ cd /test
$ ls
t1.ibd
上面是獨立表空間文件,即與表 t1 相關(guān)的表和索引數(shù)據(jù)將駐留在此文件中。
如何從ibd文件中恢復(fù)數(shù)據(jù)
參考:
網(wǎng)頁鏈接
在mysql中由于某種原因保存有ibd文件,但是表已經(jīng)被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下,通過mysql自身技術(shù)即可完成ibd文件恢復(fù).
測試環(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這個握鄭橡參數(shù)為on才能夠?qū)崿F(xiàn)每個表存儲單獨的ibd文件.innodb_force_recovery參數(shù)默認(rèn)范圍0
測試表情況
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 || 胡元會 | 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 中的卷沒有標(biāo)簽。 卷的序列號是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄0:98,304 user_login.ibd 1 個文件,304 字節(jié) 0 個目錄 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 中的卷沒有標(biāo)簽。 卷的序列號是F18 d:\ 的目錄3:98,304 user_login.ibd 1 個文件,304 字節(jié) 0 個目錄 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 中的卷沒有標(biā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 中的卷沒有標(biāo)簽。 卷的序列號是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄3:98,304 user_login.ibd 1 個文件,304 字節(jié) 0 個目錄 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 中的卷沒有標(biāo)簽。 卷的序列號是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄3:98,304 user_login.ibd 1 個文件,304 字節(jié) 0 個目錄 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 中的卷沒有標(biāo)簽。 卷的序列號是F18 D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄0:98,304 user_login.ibd 1 個文件,304 字節(jié) 0 個目錄 78,787,141,632 可用字節(jié)
啟動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 日志報錯
: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的字典信息不匹配,因為數(shù)據(jù)庫無法正常查詢該數(shù)據(jù),而且mysql為了安全直接把實例給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 || 胡元會 | 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日志依舊報了page字典信息不匹配.但是數(shù)據(jù)已經(jīng)可以訪問,通過mysqldump導(dǎo)出重新創(chuàng)建表即可.如果由于ibd損壞使用該方法無法恢復(fù),請參考:MySQL drop database恢復(fù)(恢復(fù)方法同樣適用MySQL drop table,delete,truncate table)
在使用獨立表空間的情況下,如果不慎使得innodb存儲引擎的元數(shù)據(jù)文件ibdata損壞,我們還可以挽救寶貴的數(shù)據(jù).因為在innodb使用獨立表空間的情況下,ibdata文件會記錄每個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進制查看
# vim -b ibdtest.ibd
:%!xxd
從下圖中能看到 此表在 當(dāng)前mysql數(shù)據(jù)庫中的id為0x10,即16.
此時,我們假設(shè)災(zāi)難發(fā)生,ibdata損壞…
只剩下了ibdtest.ibd文,我們跳轉(zhuǎn)到另一個mysql服務(wù)器上,用同樣的建表語句創(chuàng)建ibdtest表.
這時我們打開這個mysql服務(wù)器下的ibdtest.ibd看看:
這個表的id為0x16,即為22,那么,我們只需將原有的ibdtest.ibd表id修改為0x16即可.
出保存的時候一定要記得使用:%!xxd -r
退出保存.
并將修改好的文件覆蓋掉新的ibdtest.ibd即可,
此mysql服務(wù)器會認(rèn)為該表損毀,無法打開,沒關(guān)系,修改innodb_force_recovery = 6,
重啟mysql服務(wù):
Select下,就知道數(shù)據(jù)是否恢復(fù)了沒有:
此時,無法執(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 文件里面找回建表語句。
// 分析一個 .frm 文件生成建表的語句mysqlfrm –diagnostic /var/lib/mysql/test/t1.frm// 分析一個目錄下的全部.frm文件生成建表語句root@username:~# mysqlfrm –diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep “^CREATE TABLE” createtb.sql |wc -l124
可以看到一共生成了 124 個建表語句。
有很多時候也可以從其它庫里面生成建表語句,如同一個應(yīng)用的其它數(shù)據(jù)庫或不同的測試環(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 文件拷貝到這個 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 對數(shù)據(jù)庫 my_db 下的所有表進行檢查:
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è)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。
網(wǎng)頁題目:「深入了解數(shù)據(jù)庫中的ibd」(數(shù)據(jù)庫中的ibd是什么意思)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/cdssego.html


咨詢
建站咨詢
