MySQL數據庫入門到大蛇尚硅谷宋紅康老師筆記 高級篇 part 2

第02章_MySQL的數據目錄

1. MySQL8的主要目錄結構

?1.1 數據庫文件的存放路徑

MySQL數據庫文件的存放路徑:/var/lib/mysql/

MySQL服務器程序在啟動時會到文件系統的某個目錄下加載一些文件,之后在運行過程中產生的數據也都會存儲到這個目錄下的某些文件中,這個目錄就稱為數據目錄。
MySQL把數據都存到哪個路徑下呢?其實數據目錄對應著一個系統變量datadir,我們在使用客戶端與服務器建立連接之后查看這個系統變量的值就可以了:

show variables like 'datadir';

從結果中可以看出,在我的計算機上MysQL的數據目錄就是/var/lib/mysql/。

1.2相關命令目錄

相關命令目錄:/usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin。?

比如你 cd /usr/sbin,用ls看一下,同樣非常多。

1.3 配置文件目錄

配置文件目錄: /usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)

?2.數據庫和文件系統的關系

像InnoDB、MyISAM這樣的存儲引擎都是把表存儲在磁盤上的,操作系統用來管理磁盤的結構被稱為文件系統,所以用專業一點的話來表述就是:像InnoDB、MyISAM這樣的存儲引擎都是把表存儲在文件系統上的。當我們想讀取數據的時候,這些存儲引擎會從文件系統中把數據讀出來返回給我們,當我們想寫入數據的時候,這些存儲引擎會把這些數據又寫回文件系統。本章學習一下InnoDB和MyISAM這兩個存儲引擎的數據如何在文件系統中存儲。

查看一下在我的計算機上當前有哪些數據庫:
mysql> SHOW DATABASES;
可以看到有4個數據庫是屬于MySQL自帶的系統數據庫。

  • mysql
    MySQL系統自帶的核心數據庫,它存儲了MySQL的用戶賬戶和權限信息,一些存儲過程、事件的定義信息,一些運行過程中產生的日志信息,一些幫助信息以及時區信息等。
  • information_schema
    MySQL系統自帶的數據庫,這個數據庫保存著MySQL服務器維護的所有其他數據庫的信息,比如有哪些表、哪些視圖、哪些觸發器、哪些列、哪些索引。這些信息并不是真實的用戶數據,而是一些描述性信息,有時候也稱之為元數據。在系統數據庫information_schema中提供了一些以innodb_sys開頭的表,用于表示內部系統表。
  • performance_schema
    MySQL系統自帶的數據庫,這個數據庫里主要保存MySQ服務器運行過程中的一些狀態信息,可以用來監控MySQL服務的各類性能指標。包括統計最近執行了哪些語句,在執行過程的每個階段都花費了多長時間,內存的使用情況等信息。
  • sys
    MySQL系統自帶的數據庫,這個數據庫主要是通過視圖的形式把information_schema和
    performance_schema結合起來,幫助系統管理員和開發人員監控MysQL的技術性能。

?Innodb分為5.7和8.0兩個版本,MyISAM單個就好

?我們cd ./debest1? ?在一個表中,ll 后發現有兩個文件emp1和emp2,打開文件對應的是五個,分別是db.opt,emp1.frm,emp1.ibd,emp2.frm,emp2.ibd
.frm存儲表結構 .ibd存儲表數據

?打開8.0,相同的操作,但是是只有2個文件,emp1.ibd和mytbl2.ibd?


其中中括號擴起來的 = 可有可無,比如:我們想把 test 表從獨立表空間移動到系統表空間,可以這么寫:

ALTER TABLE test TABLESPACE innodb_system;

④ 其他類型的表空間

隨著MySQL的發展,除了上述兩種老牌表空間之外,現在還新提出了一些不同類型的表空間,比如通用表空間(general tablespace)、臨時表空間(temporary tablespace)等。

3. 疑問
.frm在MySQL8中不存在了。那去哪里了呢?

這就需要解析ibd文件。Oracle 官方將frm文件的信息及更多信息移動到叫做序列化字典信息(Serialized Dictionary Information,SDI),SDI被寫在ibd文件內部。MySQL 8.0屬于Oracle旗下,同理。

為了從IBD文件中提取SDI信息,Oracle提供了一個應用程序 ibd2sdi。
=== ibd2sdi 官方文檔 ===
這個工具不需要下載,MySQL8自帶的有,只要你配好環境變量就能到處用。

(1)查看表結構
到存儲ibd文件的目錄下,執行下面的命令:
ibd2sdi --dump-file=student.txt student.ibd

結果如圖所示
[root@bgon atguigu]# ibd2sdi --dump-file=student.txt student.ibd
[root@bgon atguigu]# ls
a.ibd student.ibd student.txt test_frm.ibd


2.3.1 InnoDB存儲引擎模式

1. 表結構

為了保存表結構,InnoDB在數據目錄下對應的數據庫子目錄下創建了一個專門用于描述表結構的文件,文件名是這樣:

表名.frm

比方說我們在 atguigu 數據庫下創建一個名為 test 的表:

mysql> USE atguigu;
Database changedmysql> CREATE TABLE test (c1 INT
);
Query OK, 0 rows affected (0.03 sec)

那在數據庫 atguigu 對應的子目錄下就會創建一個名為 test.frm 的用于描述表結構的文件。.frm文件的格式在不同的平臺上都是相同的。這個后綴名為.frm是以二進制格式存儲的,我們直接打開是亂碼的。

2. 表中數據和索引
系統表空間(system tablespace)

默認情況下,InnoDB會在數據目錄下創建一個名為 ibdata1、大小為 12M 的文件,這個文件就是對應的系統表空間在文件系統上的表示。怎么才12M?注意這個文件是自擴展文件,當不夠用的時候它會自己增加文件大小。

當然,如果你想讓系統表空間對應文件系統上多個實際文件,或者僅僅覺得原來的 ibdata1 這個文件名難聽,那可以在MySQL啟動時配置對應的文件路徑以及它們的大小,比如我們這樣修改一下my.cnf 配置文件:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
獨立表空間(file-per-table tablespace)

在MySQL5.6以及之后的版本中,InnoDB并不會默認的把各個表的數據存儲到系統表空間中,而是為每個表建立一個獨立表空間,也就是說我們創建了多少個表,就有多少個獨立表空間。使用獨立表空間來存儲表數據的話,會在該表所屬數據庫對應的子目錄下創建一個表示該獨立表空間的文件,文件名和表名相同,只不過添加了一個.ibd的擴展名而已,所以完整的文件名稱長這樣:

表名.ibd

比如:我們使用了獨立表空間去存儲 atguigu 數據庫下的 test 表的話,那么在該表所在數據庫對應的 atguigu 目錄下會為 test 表創建這兩個文件:

test.frm
test.ibd

其中 test.ibd 文件就用來存儲 test 表中的數據和索引。

系統表空間與獨立表空間的設置

我們可以自己指定使用系統表空間還是獨立表空間來存儲數據,這個功能由啟動參數 innodb_file_per_table 控制,比如說我們想刻意將表數據都存儲到系統表空間時,可以在啟動 MySQL 服務器的時候這樣配置:

[server]
innodb_file_per_table=0 # 0: 代表使用系統表空間; 1: 代表使用獨立表空間

默認情況:

mysql> show variables like 'innodb_file_per_table';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| innodb_file_per_table | ON |
+----------------+-------+
1 row in set (0.01 sec)
其他類型的表空間

隨著MySQL的發展,除了上述兩種老牌表空間之外,現在還新提出了一些不同類型的表空間,比如通用表空間(general tablespace)、臨時表空間(temporary tablespace)等。

?2.3.2 MyISAM存儲引擎模式

?在存儲表結構方面, MyISAM 和 InnoDB 一樣,也是在 數據目錄下對應的數據庫子目錄下創建了一個專門用于描述表結構的文件: 表名.frm

在MyISAM中的索引全部都是 二級索引,該存儲引擎的 數據和索引是分開存放的。所以在文件系統中也是 使用不同的文件來存儲數據文件和索引文件,同時表數據都存放在對應的數據庫子目錄下。假如 表使用MyISAM存儲引擎的話,那么在它所在數據庫對應的 atguigu 目錄下會為 test test 表創建這三個文件:

test.frm ? 存儲表結構
test.MYD ? 存儲數據 (MYData)
test.MYI ? 存儲索引 (MYIndex)

?舉例:創建一個 MyISAM 表,使用 ENGINE 選項顯式指定引擎。因為InnoDB是默認引擎。

CREATE TABLE `student_myisam` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(64) DEFAULT NULL,`age` int DEFAULT NULL,`sex` varchar(2) DEFAULT NULL,PRIMARY KEY (`id`))ENGINE=MYISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb3;

2.4 小結

舉例:數據庫a,表b。
1、如果表b采用 InnoDB,data\a中會產生1個或者2個文件:
- b.frm:描述表結構文件,字段長度等
- 如果采用 系統表空間 模式的,數據信息和索引信息都存儲在 ibdata1 中
- 如果采用 獨立表空間 存儲模式,data\a中還會產生 b.ibd 文件(存儲數據信息和索引信息)

此外:
① MySQL5.7 中會在 data/a 的目錄下生成 db.opt 文件用于保存數據庫的相關配置。比如:字符集、比較規則。而 MySQL8.0 不再提供 db.opt 文件。
② MySQL8.0 中不再單獨提供 b.frm,而是合并在 b.ibd 文件中。

2、如果表b采用 MyISAM,data\a中會產生3個文件:
- MySQL5.7 中:b.frm:描述表結構文件,字段長度等。
- MySQL8.0 中 b.xxx.sdi:描述表結構文件,字段長度等
- b.MYD (MYData):數據信息文件,存儲數據信息(如果采用獨立表存儲模式)
- b.MYI (MYIndex):存放索引信息文件

?2.5視圖在文件系統中的表示

我們知道MySQL中的視圖其實是虛擬的表,也就是某個查詢語句的一個別名而已,所以在存儲視圖的時候是不需要存儲真實的數據的,只需要把它的結構存儲起來就行了。和表一樣,描述視圖結構的文件也會被存儲到所屬數據庫對應的子目錄下邊,只會存儲一個視圖名.frm的文件。如下圖中的:emp_details_view.frm

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70430.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http 響應碼影響 video 標簽播放視頻

背景 使用后端給的文件下載接口地址實現視頻播放,但是 video 標簽一直無法播放視頻如下圖,把接口地址放到瀏覽器請求能直接下載。但就是不能播放 原因 http 響應碼不正確,返回201是無法播放視頻200可以如下圖 狀態碼的影響: 20…

OneNote手機/平板“更多筆記本”中有許多已經刪掉或改名的,如何刪除

問題描述: OneNote 在手機或平板上添加“更多筆記本”中,有許多已經刪掉或改名的筆記本!如何刪除? OR:如何徹底刪除OneNote中的筆記本? 處理做法: 這個列表對應365里面的【最近打開】&#…

LeetCode--23. 合并 K 個升序鏈表【堆和分治】

23. 合并 K 個升序鏈表 給你一個鏈表數組,每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。 正文 這道題有多種解決方案 堆 比較容易,又比較直觀的就是堆排序,將每個節點加入最小根堆中&…

【 Avalonia UI 語言國際化 I18n】圖文結合教學,保姆級教學,語言國際化就是這么簡單(.Net C#)

完整項目地址 github : https://github.com/Crazy-GrowUp/AvaloniaI18nTest/tree/master gitee :https://gitee.com/jack_of_disco/avalonia-i18n-test 0.項目新建 Properties 文件夾 對應的項目配置文件里面就會增加 <Folder Include"Properties\" /> 1.項…

點擊el-dialog彈框跳到其他頁面瀏覽器的滾動條消失了多了 el-popup-parent--hidden

點擊el-dialog彈框跳到其他頁面瀏覽器的滾動條消失了 在使用 el-dialog 彈框時&#xff0c;Element Plus 會在彈框打開時自動給 body 添加 el-popup-parent–hidden 類&#xff0c;以隱藏滾動條。如果在跳轉到其他頁面時滾動條沒有恢復&#xff0c;可能是因為 el-dialog 沒有正…

JWT認證機制

Session認證機制中需要配合cookie才能實現&#xff0c;由于cookie默認不支持跨域訪問&#xff0c;當涉及到前端跨域請求后端接口時&#xff0c;需要做很多額外的配置&#xff0c;才能實現跨域session認證。所以這里不推薦使用session身份認證機制&#xff0c;一般推薦使用jwt認…

netcore 啟用gzip壓縮及緩存

public void ConfigureServices(IServiceCollection services) {....// 配置gzip 與 br的壓縮等級為最優services.Configure<BrotliCompressionProviderOptions>(options > {options.Level CompressionLevel.Optimal;});services.Configure<GzipCompressionProvid…

qt:常見標簽操作,倒計時功能,進度條與日歷

1.標簽常見函數 函數功能void setext(const QString &text)設置文本QString text()const獲取文本void setPixmap(const QPixmap)與Pixmap()const設置和獲取圖像void setAlignment(Qt::Alignment alignment)設置對齊&#xff08;獲取和上面一樣&#xff09;void setWordWr…

STM32MP157A單片機移植Linux驅動

在stm32mp157a單片機移植Linux操作系統&#xff0c;并移植內核驅動&#xff0c;在應用程序中使用3個線程&#xff0c;分別實現控制單片機上3個led流水燈的功能、蜂鳴器控制的功能、風扇控制的功能。 需求整理&#xff1a; 1.驅動程序-->led1.c&#xff0c;led2.c&#xff…

python中格式化輸出知識點匯總

在Python中&#xff0c;格式化輸出是一種常見的操作&#xff0c;用于將數據以特定的格式展示。以下是Python中格式化輸出的主要方法&#xff1a; ### 1. 使用 % 操作符 這是Python早期版本中常用的格式化方法&#xff0c;類似于C語言中的printf。 - **基本語法**&#xff1a;&…

完美轉發使用

完美轉發的幾個例子 例子 1&#xff1a;普通的完美轉發 首先&#xff0c;我們先來一個簡單的完美轉發的例子&#xff0c;展示如何使用 std::forward 來保持傳入參數的類型。 #include <iostream> #include <utility> // std::forwardvoid func(int& x) {st…

【Content-Type詳解、Postman中binary格式、json格式數據轉原始二進制流等】

Content-Type詳解、Postman中binary格式、json格式數據轉原始二進制流等 背景&#xff1a;postman中如何使用binary格式上傳文件 Content-TypeContent-Type的格式由三部分組成&#xff1a;以下是一些常見的Content-Type示例&#xff1a; Postman中 binary格式定義&#xff1a;用…

DeepSeek等大模型功能集成到WPS中的詳細步驟

記錄下將**DeepSeek功能集成到WPS中**的步驟&#xff0c;以備忘。 1. 下載并安裝OfficeAI插件 訪問OfficeAI插件下載地址&#xff1a;https://www.office-ai.cn/&#xff0c;下載插件&#xff08;目前只支持windows系統&#xff09;。 注意&#xff0c;有兩個插件&#xff0…

MATLAB學習之旅:從入門到基礎實踐

在當今科技飛速發展的時代,MATLAB作為一款強大的數學軟件,猶如一把神奇的鑰匙,能夠打開眾多領域的大門。無論是工程計算、數據分析,還是算法開發、可視化呈現,MATLAB都展現出了無與倫比的魅力。今天,就讓我們踏上這段奇妙的MATLAB學習之旅,從最基礎的部分開始,逐步探索…

在Ubutu18.04下搭建nfs服務器

在Ubutu18.04下搭建nfs服務器 主要參考這篇博客 Ubuntu18.04下安裝NFS詳細步驟_烏班圖安裝nfs-CSDN博客 1.安裝NFS服務&#xff1a; 服務器端&#xff1a; sudo apt install nfs-kernel-server

棧,優先級隊列,map,set

文章目錄 棧題目解析代碼 優先級隊列題解代碼 map題解代碼 set題解代碼 棧 題目解析 1.先把元素push進棧中&#xff0c;如果棧非空并且棧中的元素按順序和k相等就出棧&#xff0c;直到棧為空或者k ! sk.top() 代碼 #include<iostream> #include<stack> #include&l…

C++ Primer 類的靜態成員

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

Java——super

在Java中&#xff0c;super關鍵字用于引用父類的成員&#xff08;屬性、方法或構造器&#xff09;。它在繼承關系中非常重要&#xff0c;主要用于以下幾種場景&#xff1a; 1. 調用父類的構造器 在子類的構造器中&#xff0c;可以使用super關鍵字調用父類的構造器。super()必須…

Unity 全局屏幕點擊特效

思路&#xff1a; 1、生成一個點擊特效實例&#xff0c;每點擊屏幕&#xff0c;就調整特效實例的位置并控制特效的顯隱狀態即可。 2、需要注意要保證在編輯器開發時或手機上運行時都要顯示點擊效果。 方案一 &#xff08;推薦&#xff09; using UnityEngine; using UnityEn…

什么是業務流程分類框架

業務流程分類框架是一個用于組織和系統化地分類業務流程的結構化方法。它旨在幫助企業理解、管理、分析和改進其運營流程。 可以把它想象成一個圖書館的圖書分類系統&#xff0c;幫助快速找到和理解不同類型的書籍。對于業務流程來說&#xff0c;分類框架幫助快速了解不同類型的…