一、MySQL數據存放位置
MySQL數據庫會在data目錄下,以數據庫為名,為每一個數據庫建立文件夾,用來存儲數據庫中的表文件數據。
不同的數據庫引擎,每個表的擴展名也不一樣 ,例如: MyISAM用“.MYD”作為擴展名,Innodb用“.ibd”等。
二、MySQL數據介紹
1、".FRM" 表結構信息文件
無論是哪種存儲引擎,創建表之后就一定會生成一個以表明命名的’.frm’文件。frm文件主要存放與表相關的數據信息,主要包括表結構的定義信息。當數據庫崩潰時,用戶可以通過frm文件來恢復數據表結構。
2、Innodb存儲引擎的文件
Innodb存儲引擎的文件:后綴為 “.ibd” 和 “.ibdata” 的文件
這兩種文件都是存放Innodb數據的文件,之所以有兩種文件來存放Innodb的數據(包括索引),是因為Innodb的數據存儲方式能夠通過配置來決定是使用共享表空間存放存儲數據,還是獨享表空間存放存儲數據。
獨享表空間存儲方式使用“.ibd”文件來存放數據,且每個表一個“.ibd”文件 ,文件存放在和MyISAM數據相同的位置。
獨占表空間: 每一個表都將會生成以獨立的文件方式來進行存儲,每一個表都有一個.frm表描述文件(MySQL 8.0之前才有),還有一個.ibd文件。其中這個文件包括了 單獨一個表的數據 內容以及索引內容。
共享表存儲方式,則會使用“.ibdata“文件來存放,所有表共同使用一個(或者多個, 可自行配置)ibdata文件。
ibdata文件可以通過以下兩個參數配置組成:
-
innodb_data_home_dir(數據存放目錄)
-
innodb_data_file_path (配置每個文件的名稱)
-
innodb_data_file_path中可以一次配置多個ibdata文件 如:
-
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend 配置方式
共享表空間以及獨占表空間都是針對數據的存儲方式而言的。
共享表空間: 某一個數據庫的所有的表數據,索引文件全部放在一個文件中。
兩者對比
(1.)共享表空間:
-
優點: 可以放表空間分成多個文件存放到各個磁盤上。數據和文件放在一起方便管理。
-
缺點: 所有的數據和索引存放到一個文件中,多個表及索引在表空間中混合存儲,這樣對於一個表做了大量刪除操作后表空間中將會有大量的空 隙,特別是對於統計分析,日志系統這類應用最不適合用共享表空間。
(2.)獨立表空間:
- 優點:
-
每個表都有自已獨立的表空間。
-
每個表的數據和索引都會存在自已的表空間中。
-
可以實現單表在不同的數據庫中移動。
-
空間可以回收
a) Drop table操作自動回收表空間,如果對於統計分析或是日志表,刪除大量數據后可以通過: alter table TableName engine=innodb;回收不用的空間。
b) 對於使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。 缺點:單表增加過大,如超過100 個G。 相比較之下,使用獨占表空間的效率以及性能會更高一點
共享表空間和獨立表空間之間的轉換
-
# ON代表獨立表空間管理,OFF代表共享表空間管理;
-
show variables like "innodb_file_per_table";
-
修改數據庫的表空間管理方式 修改innodb_file_per_table的參數值即可,但是修改不能影響之前已經使用過的共享表空間和獨立表空間;
-
innodb_file_per_table=1 為使用獨占表空間
-
innodb_file_per_table=0 為使用共享表空間
3、Myisam存儲引擎的文件
Myisam存儲引擎的文件 后綴為 ".MYD"的文件
“.MYD”文件是MyISAM存儲引擎專用,存放MyISAM表的數據。每一個MyISAM表都會有一個“.MYD”文件與之對應,同樣存放於所屬數據庫的文件夾 下, 和“.frm”文件在一起。
后綴為".MYI"文件
“.MYI”文件也是專屬於MyISAM存儲引擎的,主要存放MyISAM表的索引相關信息。對於MyISAM存儲來說,可以被cache 的內容主要就是來源 於“.MYI”文件中。 每一個MyISAM表對應一個“.MYI”文件,存放於位置和“.frm”以及“.MYD”一樣。
原文鏈接:https://blog.csdn.net/qq_41993206/article/details/109411646