在 MySQL 中,物理文件存放在數據目錄中。數據目錄與安裝目錄不同,安裝目錄用來存儲控制服務器和客戶端程序的命令,數據目錄用來存儲 MySQL 服務器在運行過程中產生的數據。本節主要介紹 MySQL 數據目錄的物理結構和作用。
MySQL 中任何一項邏輯性或者物理性文件都具有可配置性,另外由于開源的原因,每個版本都有一些改進,所以我們在學習本節內容時要靈活掌握,不能生搬硬套。
如果你不知道 MySQL 的數據目錄路徑,可以通過`SHOW VARIABLES LIKE 'datadir';`命令查看。
下面分別講解 MySQL 數據目錄里存放的目錄和文件。
## 1\. 數據目錄
下圖是 MySQL(5.7.29)在 Windows 系統下安裝的數據文件目錄,可以看到有如下幾類文件。

Data 目錄用來存放數據庫相關的數據信息,包括數據庫信息,表信息等。
MySQL 5.7 及之后的版本開始支持集群模式,installer\_config.xml 配置文件主要用于配置單節點或集群模式。
my.ini 文件是 MySQL 服務端和客戶端主要的配置文件,包括編碼集、默認引擎、最大連接數等設置。MySQL 服務器啟動時會默認加載此文件。
## 2\. Data目錄
Data 目錄中存放的文件如下圖所示:

由圖中可以看出,系統數據庫和用戶自定義數據庫的存放路徑相同。數據庫目錄中主要存放相應的數據庫對象(圖中箭頭指向的為 test 數據庫目錄中存放的文件 )。
對 Data 目錄中的文件說明如下:
* mysql、performance\_schema、sakila、sys 和 world 是系統數據庫,information\_schema 數據庫比較特殊,這里沒有相應的數據庫目錄。
* test 是用戶自定義的數據庫,也就是用戶自己創建的數據庫。
* auto.cnf:MySQL 服務器的選項文件,用于存儲 server-uuid 的值。server-uuid 與 server-id 一樣,用于標識 MySQL 實例在集群中的唯一性。
* ib\_logfile0、ib\_logfile1 是支持事務性引擎的 redo 日志文件
* ibdata1 為共享表空間(系統表空間)。如果采用 InnoDB 引擎,默認大小為?10M 。
* ibtmp1 為存儲臨時對象的空間,比如臨時表對象等。
數據目錄里可能還有:
* MySQL 服務器的進程 ID(PID)文件。
* MySQL 服務器所生成的狀態和日志文件。
* DES 密鑰文件或服務器的 SSL 證書。
## 3\. 數據庫目錄
數據庫實際是一個目錄,每個目錄都保存著相應數據庫中的表以及表數據。下面我們以 test 數據庫為例講解目錄中存放的文件。?
test 數據庫中有如下幾張數據表:
~~~
+-------------------+
| Tables_in_test |
+-------------------+
| tb_student |
| tb_student_course |
| tb_students_info |
| tb_usertest |
+-------------------+
~~~
對 test 數據庫目錄中的文件說明如下:
#### 1)db.opt
用來保存數據庫的配置信息,比如該庫的默認字符集編碼和字符集排序規則。如果你創建數據庫時指定了字符集和排序規則,后續創建的表沒有指定字符集和排序規則,那么該表將采用 db.opt 文件中指定的屬性。
對于 InnoDB 表,如果是獨立的表空間,數據庫中的表結構以及數據都存儲在數據庫的路徑下(而不是在共享表空間 ibdata1 文件中)。但是數據中的其他對象,包括數據被修改之后,事務提交之間的版本信息,仍然存儲在共享表空間的 ibdata1 文件中。
#### 2).frm
在 MySQL 中建立任何一張數據表,其對應的數據庫目錄下都會有該表的 .frm 文件。`.frm`文件用來保存每個數據表的元數據(meta)和表結構等信息。數據庫崩潰時,可以用 .frm 文件恢復表結構。
.frm 文件跟存儲引擎無關,任何存儲引擎的數據表都有 .frm 文件,命名方式為`表名.frm`,如 users.frm。
> MySQL 8.0 版本開始,frm 文件被取消,MySQL 把文件中的數據都寫到了系統表空間。通過利用 InnoDB 存儲引擎來實現表 DDL 語句操作的原子性(在之前版本中是無法實現表 DDL 語句操作的原子性的,如 TRUNCATE 無法回滾)。
#### 3).MYD和.MYI
* `.MYD`理解為 My Data,用于存放 MyISAM 表的數據。
* `.MYI?`?理解為 My Index,主要存放 MyISAM 表的索引及相關信息。
#### 4).ibd
對于 InnoDB 存儲引擎的數據表,一個表對應兩個文件,一個是`*.frm`,存儲表結構信息;一個是`*.ibd`,存儲表中數據。
#### 5).ibd和.ibdata
.ibd 和 .ibdata 都是專屬于 InnoDB 存儲引擎的數據庫文件。當采用共享表空間時,所有 InnoDB 表的數據均存放在 .ibdata 中。所以當表越來越多時,這個文件會變得很大。相對應的 .ibd 就是采用獨享表空間時 InnoDB 表的數據文件。
當然,就算開啟了獨享表空間,ibdata 文件也會越來越大,因為這個文件里還存儲了:
* 變更緩沖區
* 雙寫緩沖區
* 撤銷日志
- 數據庫入門
- 1.常用的數據庫
- 2.數據管理技術的3個發展階段
- 3.數據庫是什么?關系型數據庫和非關系型數據庫又是什么?
- 4.為什么要使用數據庫?
- 5.數據庫系統是什么?它由哪幾部分組成?
- 6.常用數據庫訪問接口簡介
- 7.數據庫的種類有哪些?
- 8.幾種常用的數據庫
- 9.MySQL是什么
- 10.MySQL適用于哪些場景?
- 11.學MySQL前,需要了解這些數據庫專業術語
- 12.MySQL客戶端和服務器架構(C/S架構)
- 13.明白了MySQL內部結構才能成為高手!
- 14.如何學習數據庫(新手必看)?
- 15.小白學習MySQL需要多長時間,能從事哪方面的工作?
- 16.當前市場對數據庫程序員的需求如何?待遇如何?
- 17.DBA到底要做什么,成為一名DBA需要具備什么能力?
- 一、數據庫的概念和常用工具
- 二、MySQL規范、配置及登錄退出操作
- 三、MySQL中的數據類型
- 四、數據庫增查改刪等操作
- 五、數據表增查改刪操作
- 六、MySQL數據增查改刪操作
- 七、MySQL存儲引擎
- 八、MySQL常用函數
- MySQL的安裝和配置
- 1.MySQL 5.7的新特性(新功能)
- 2.MySQL下載步驟詳解
- 3.MySQL安裝配置教程(Windows系統)
- 4.MySQL免安裝版配置教程
- 5.MySQL配置環境變量
- 6.安裝MySQL后,如何判斷是否已安裝成功
- 7.啟動MySQL服務的兩種方式(圖解)
- 8.登錄MySQL數據庫
- 9.對Linux MySQL軟件包的一些說明
- 10.Linux CentOS卸載MySQL(Linux安裝MySQL前的準備)
- 11.Linux安裝配置MySQL詳細步驟
- 12.MySQL my.cnf配置文件詳解
- 13.MySQL常用圖形化管理工具
- 14.MySQL安裝后的目錄結構介紹
- 15.MySQL數據庫文件存放目錄結構詳解
- 16.MySQL配置文件(my.ini)詳解
- 17.與其它數據庫不同,MySQL可以在不同的SQL模式下運行
- 18.MySql Command Line Client閃退原因及解決方案
- MySQL數據庫的基本操作
- 1.SQL是什么?它能做什么?
- 2.SQL的基本書寫規則
- 3.MySQL查看或顯示數據庫(SHOW DATABASES語句)
- 4.MySQL創建數據庫(CREATE DATABASE語句)
- 5.MySQL修改數據庫:ALTER DATABASE用法簡介
- 6.MySQL刪除數據庫(DROP DATABASE語句)
- 7.MySQL選擇數據庫(MySQL USE語句)
- 8.MySQL注釋:單行注釋和多行注釋
- 9.MySQL中SQL語句的大小寫規則
- 10.如何查看MySQL系統幫助?
- 11.看懂SQL錯誤代碼,提高學習效率!
- 數據庫高級
- 一、視圖的操作
- 二、觸發器的操作
- 三、事務的操作
- 四、索引的操作
- 五、存儲過程的操作
- 六、數據庫的優化方案
- 1.分庫、分表和索引
- 2.讀寫分離和查詢優化
- 3.join代替子查詢
- 4.盡量使用短小的事務
- 5.常用小技巧
- MySQL使用注意事項
- 1.字符亂碼及連接驅動