Mysql和文件系統(tǒng)的關(guān)聯(lián)詳情
前言
在Linux中采用文件系統(tǒng)管理磁盤,而Mysql常用的存儲(chǔ)引擎如InnoDB、MyISAM采用的是文件存儲(chǔ),自然和文件系統(tǒng)掛鉤,那么Mysql都有哪些地方用到了文件系統(tǒng)呢?下面聊聊
Mysql數(shù)據(jù)目錄
Mysql系統(tǒng)啟動(dòng)文件(默認(rèn)my.cnf)中可能會(huì)指定Mysql的一個(gè)全局系統(tǒng)變量datadir,這個(gè)變量可以指定Mysql的數(shù)據(jù)存儲(chǔ)目錄,
如下:
或者采用查詢變量的形式獲?。ㄏ旅嫠醒菔窘貓D都是從這個(gè)目錄出發(fā))
mysql> show variables like '%datadir%'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | datadir | /usr/local/mysql-5.7.26/data/ | +---------------+-------------------------------+ 1 row in set (0.00 sec)
數(shù)據(jù)目錄相關(guān)結(jié)構(gòu)
數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)
每創(chuàng)建完一個(gè)數(shù)據(jù)庫(kù)會(huì)在預(yù)定義的datadir路徑下創(chuàng)建一個(gè)以數(shù)據(jù)庫(kù)名同名的文件夾
mysql> create database test_data; Query OK, 1 row affected (0.00 sec)
創(chuàng)建完test_data文件夾,會(huì)在該文件夾下創(chuàng)建一個(gè)db.opt的文件,該文件用于存放數(shù)據(jù)庫(kù)的屬性如字符集和比較規(guī)則。
有一點(diǎn)我們需要注意系統(tǒng)自帶的數(shù)據(jù)庫(kù)有四個(gè)分別是mysql(存儲(chǔ)Mysql用戶權(quán)限等信息)、information_schema(其它數(shù)據(jù)庫(kù)描述信息)、performance_schema(存儲(chǔ)Mysql運(yùn)行時(shí)狀態(tài)等)、sys(服務(wù)器性能視圖),其中除information_schema外都會(huì)創(chuàng)建一個(gè)文件夾。
表結(jié)構(gòu)存儲(chǔ)
如給上述創(chuàng)建的test_data數(shù)據(jù)庫(kù)新建一個(gè)表
CREATE TABLE test_table ( name varchar(100) DEFAULT NULL ) ENGINE=InnoDB
那么Mysql會(huì)在數(shù)據(jù)庫(kù)同名文件夾也就是test_data上新建一個(gè)同表名的文件test_table.frm,這個(gè)文件用于描述表的字段,索引、約束等等
表數(shù)據(jù)存儲(chǔ)
表數(shù)據(jù)存儲(chǔ)不同的存儲(chǔ)引擎,存儲(chǔ)文件是不同的,以常用InnoDB和MyISAM舉例。
InnoDB存儲(chǔ)引擎表數(shù)據(jù)存儲(chǔ)
InnoDB存儲(chǔ)引擎都是以頁(yè)為單位管理存儲(chǔ)空間的,一個(gè)數(shù)據(jù)頁(yè)的大小為16k,而InnoDB為了方便管理引入表空間的概念,一個(gè)表空間中可能包含多個(gè)數(shù)據(jù)頁(yè),當(dāng)然表空間又分為幾種如下。
系統(tǒng)表空間
從Mysql版本5.5.7到5.6.6之間的版本默認(rèn)將表數(shù)據(jù)放入系統(tǒng)表空間中,在默認(rèn)情況下數(shù)據(jù)目錄的位置會(huì)自動(dòng)生成一個(gè)文件名為ibdata1的文件,該文件大小為12M,
如下;
這個(gè)文件的大小并不是固定的,可以自增長(zhǎng),這意味著該文件存儲(chǔ)不下時(shí)可以自動(dòng)擴(kuò)充大小。
獨(dú)立表空間
在Mysql版本從5.6.6后不再存儲(chǔ)到系統(tǒng)表空間,而是存儲(chǔ)到獨(dú)立表空間,獨(dú)立意味著表與表之間的數(shù)據(jù)獨(dú)立開來,Mysql會(huì)為每一個(gè)表建立一個(gè)獨(dú)立的空間,有多少個(gè)表就有多少個(gè)獨(dú)立空間,所以當(dāng)我們執(zhí)行建表語(yǔ)句
-- 默認(rèn)InnoDB存儲(chǔ)引擎 CREATE TABLE test_table ( name varchar(100) DEFAULT NULL ) ENGINE=InnoDB
會(huì)在當(dāng)前數(shù)據(jù)庫(kù)同名的目錄下新建一個(gè)同表名的idb文件:
至于用戶想選擇系統(tǒng)表空間還是獨(dú)立表空間可以由用戶自己決定,通過修改系統(tǒng)變量innodb_file_per_table
就可以實(shí)現(xiàn),為0表示使用系統(tǒng)表空間,為1表示使用獨(dú)立表空間,這里需要注意的是修改該系統(tǒng)參數(shù)只對(duì)新建表生效,至于修改系統(tǒng)參數(shù)之前的表需要手動(dòng)修改。
MyISAM存儲(chǔ)引擎表數(shù)據(jù)存儲(chǔ)
MyISAM的存儲(chǔ)引擎和InnoDB存儲(chǔ)引擎在文件系統(tǒng)上的最大區(qū)別就是MyISAM將索引和數(shù)據(jù)文件分開,InnoDB強(qiáng)調(diào)的是索引既數(shù)據(jù),就是因?yàn)檫@樣所以MyISAM存儲(chǔ)引擎的表由三個(gè)文件描述
- 表名.frm:描述表結(jié)構(gòu),索引,約束等。
- 表名.MYD:存儲(chǔ)表數(shù)據(jù)。
- 表名.MYI:存儲(chǔ)表索引。
如下創(chuàng)建測(cè)試表:
CREATE TABLE `test_table_myisam` ( `name` varchar(100) DEFAULT NULL ) ENGINE=MyISAM
特殊視圖存儲(chǔ)
create view view_test as select * from test_table;
因?yàn)橐晥D本質(zhì)就是虛擬表,僅僅是查詢語(yǔ)句的別名,存儲(chǔ)時(shí)不保存視圖的數(shù)據(jù),僅僅只保存視圖的表結(jié)構(gòu),所以創(chuàng)建視圖僅僅會(huì)創(chuàng)建一個(gè)與視圖同名的frm文件。
到此這篇關(guān)于Mysql和文件系統(tǒng)的關(guān)聯(lián)詳情的文章就介紹到這了,更多相關(guān)Mysql文件系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql字符串截取及獲取指定字符串中的數(shù)據(jù)
小編童鞋最近接了一個(gè)新需求,需要在MySql的字段中截取一段字符串中的特定字符,下面小編把我的核心代碼分享給大家,對(duì)mysql 字符串截取相關(guān)知識(shí)感興趣的朋友一起看看吧2019-11-11MySQL錯(cuò)誤提示:sql_mode=only_full_group_by完美解決方案
有時(shí)候遇到數(shù)據(jù)庫(kù)重復(fù)數(shù)據(jù),需要將數(shù)據(jù)進(jìn)行分組,并取出其中一條來展示,這時(shí)就需要用到group by語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于MySQL錯(cuò)誤提示:sql_mode=only_full_group_by的完美解決方案,需要的朋友可以參考下2022-10-10mysql中將null值轉(zhuǎn)換為0的語(yǔ)句
mysql中將null值轉(zhuǎn)換為0的語(yǔ)句,在mysql數(shù)據(jù)庫(kù)開發(fā)中,如果后期添加了字段那么這些值為空值null,我們?cè)谑褂谜咝枰獙ull轉(zhuǎn)換為0方便后期的控制就需要下面的代碼了。2011-02-02mysql 5.7.12 winx64手動(dòng)安裝教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.12 winx64手動(dòng)安裝配置方法圖文教程,感興趣的朋友可以參考一下2016-12-12MySQL 中 blob 和 text 數(shù)據(jù)類型詳解
本文主要介紹了MySQL中blob和text數(shù)據(jù)類型詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02linux下perl操作mysql數(shù)據(jù)庫(kù)(需要安裝DBI)
有時(shí)候需要perl操作mysql數(shù)據(jù)庫(kù),可以通過DBI實(shí)現(xiàn),需要的朋友可以參考下2012-05-05MySQL數(shù)據(jù)庫(kù)安全秘籍之守護(hù)數(shù)據(jù)金庫(kù)防火防盜防攻擊
MySQL是許多公司和組織的關(guān)鍵數(shù)據(jù)庫(kù),因此其安全性的重要性如此顯而易見,為了確保MySQL的安全性,需要采取多種措施來增強(qiáng)其安全性,本文給大家介紹MySQL數(shù)據(jù)庫(kù)安全秘籍之守護(hù)數(shù)據(jù)金庫(kù)防火防盜防攻擊,感興趣的朋友一起看看吧2023-03-03Mysql數(shù)據(jù)庫(kù)定時(shí)備份腳本分享
這篇文章主要分享了Mysql數(shù)據(jù)庫(kù)的定時(shí)備份腳本,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-09-09