首頁 > 軟體

Mysql和檔案系統的關聯詳情

2022-09-30 14:02:44

前言

在Linux中採用檔案系統管理磁碟,而Mysql常用的儲存引擎如InnoDB、MyISAM採用的是檔案儲存,自然和檔案系統掛鉤,那麼Mysql都有哪些地方用到了檔案系統呢?下面聊聊

Mysql資料目錄

Mysql系統啟動檔案(預設my.cnf)中可能會指定Mysql的一個全域性系統變數datadir,這個變數可以指定Mysql的資料儲存目錄,

如下:

或者採用查詢變數的形式獲取(下面所有演示截圖都是從這個目錄出發)

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

資料目錄相關結構

資料庫儲存結構

每建立完一個資料庫會在預定義的datadir路徑下建立一個以資料庫名同名的資料夾

mysql> create database test_data;
Query OK, 1 row affected (0.00 sec)

建立完test_data資料夾,會在該資料夾下建立一個db.opt的檔案,該檔案用於存放資料庫的屬性如字元集和比較規則。

有一點我們需要注意系統自帶的資料庫有四個分別是mysql(儲存Mysql使用者許可權等資訊)、information_schema(其它資料庫描述資訊)、performance_schema(儲存Mysql執行時狀態等)、sys(伺服器效能檢視),其中除information_schema外都會建立一個資料夾。

表結構儲存

如給上述建立的test_data資料庫新建一個表

CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

那麼Mysql會在資料庫同名資料夾也就是test_data上新建一個同表名的檔案test_table.frm,這個檔案用於描述表的欄位,索引、約束等等

表資料儲存

表資料儲存不同的儲存引擎,儲存檔案是不同的,以常用InnoDB和MyISAM舉例。

InnoDB儲存引擎表資料儲存

InnoDB儲存引擎都是以頁為單位管理儲存空間的,一個資料頁的大小為16k,而InnoDB為了方便管理引入表空間的概念,一個表空間中可能包含多個資料頁,當然表空間又分為幾種如下。

系統表空間

從Mysql版本5.5.7到5.6.6之間的版本預設將表資料放入系統表空間中,在預設情況下資料目錄的位置會自動生成一個檔名為ibdata1的檔案,該檔案大小為12M,

如下;

這個檔案的大小並不是固定的,可以自增長,這意味著該檔案儲存不下時可以自動擴充大小。

獨立表空間

在Mysql版本從5.6.6後不再儲存到系統表空間,而是儲存到獨立表空間,獨立意味著表與表之間的資料獨立開來,Mysql會為每一個表建立一個獨立的空間,有多少個表就有多少個獨立空間,所以當我們執行建表語句

-- 預設InnoDB儲存引擎
CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

會在當前資料庫同名的目錄下新建一個同表名的idb檔案:

至於使用者想選擇系統表空間還是獨立表空間可以由使用者自己決定,通過修改系統變數innodb_file_per_table就可以實現,為0表示使用系統表空間,為1表示使用獨立表空間,這裡需要注意的是修改該系統引數只對新建表生效,至於修改系統引數之前的表需要手動修改。

MyISAM儲存引擎表資料儲存

MyISAM的儲存引擎和InnoDB儲存引擎在檔案系統上的最大區別就是MyISAM將索引和資料檔案分開,InnoDB強調的是索引既資料,就是因為這樣所以MyISAM儲存引擎的表由三個檔案描述

  • 表名.frm:描述表結構,索引,約束等。
  • 表名.MYD:儲存表資料。
  • 表名.MYI:儲存表索引。

如下建立測試表:

CREATE TABLE `test_table_myisam` (
  `name` varchar(100) DEFAULT NULL
) ENGINE=MyISAM

特殊檢視儲存

create view view_test as select * from test_table;

因為檢視本質就是虛擬表,僅僅是查詢語句的別名,儲存時不儲存檢視的資料,僅僅只儲存檢視的表結構,所以建立檢視僅僅會建立一個與檢視同名的frm檔案。

到此這篇關於Mysql和檔案系統的關聯詳情的文章就介紹到這了,更多相關Mysql檔案系統內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com