MySQL的數據目錄


來源

MySQL的幾個存儲引擎如InnoDB和MyISAM都是將數據存儲到磁盤上,而我們的操作系統是通過文件系統來管理磁盤的,所以可以說這幾個存儲引擎都是將表存儲在文件系統上的,而我們通過操作文件系統來讀寫數據。

定義

數據目錄存儲MySQL服務器在運行過程重產生的數據,且在服務器程序啟動時會從這個目錄下加載一些文件。與安裝目錄不同,安裝目錄存儲了許多控制服務器和客戶端程序的命令。

結構

通過語句 SHOW VARIABLES LIKE 'datadir'; 可查看數據目錄地址。

如下圖為這個數據目錄下的內容,information_schema比較特殊,沒有使用相應的數據庫目錄

已知數據目錄位置,我們創建的數據庫就會在該文件夾下面生成一個同名子目錄,並在這個子目錄下創建一個名為db.opt的文件,這個文件包含該數據庫的各種屬性,如字符集/比較規則等

如下圖為數據庫tcc目錄下的內容,它包含表結構的定義和表數據

不同的存儲引擎存儲表數據不同
  • InnoDB
    • 頁為基本單位管理存儲空間

    • 索引對應一顆B+樹,B+樹每個節點對應一個數據頁

    • InnoDB提出表空間/文件空間的概念來對應文件系統上一個或多個真實文件,我們的表數據就存放在某個表空間下的某些頁里

      • 系統表空間:存儲於數據目錄下名為ibdata1,是個自擴展文件,可通過修改配置文件修改其位置大小;系統表空間在一個MySQL服務器中只有一份,MySQL5.5.7-5.6.6版本之間,表中數據默認存儲到這個系統表空間
      • 獨立表空間:MySQL5.6.6版本之后InnoDB不會默認將表數據(數據+索引)存儲到系統表空間而是單獨為每一個表創建一個獨立表空間,存儲於每個數據庫目錄下以.ibd為擴展名;
      • 可通過配置innodb_file_per_table=0孔子數據存儲到系統表空間,1為存儲到獨立表空間,若想將原來的數據遷移到系統/獨立表空間可使用語句ALTER TABLE 表名 TABLESPACE [=] innodb_system;系統表空間只存放一些系統數據,獨立表空間只存放這個表的數據
      • 其他類型的表空間.......
  • MyISAM
    • MyISAM的索引全是二級索引,且數據和索引是分開存儲的,所以使用不同的文件來存儲數據文件和索引文件
    • 沒有表空間,表數據存儲到對應的數據庫子目錄下,.MYD代表數據文件,.MYI代表索引文件

 

視圖

MySQL中的視圖其實是虛擬的表,所以存儲視圖不需要存儲真實數據,只要存儲其結構,以.frm文件存儲到數據庫對應的目錄下;8.0版本之后就沒有.frm文件了

其他文件

數據目錄下還存放一些其他的文件以更好的運行程序

  • 服務器進程文件
  • 服務器日志文件
  • 默認/自動生成的SSL和RSA證書和密鑰文件

 

InnoDB的表空間

  • 獨立表空間結構
  • 系統表空間結構

表空間被划分為許多連續的extent,每個區默認由64個頁組成,每256個區划分為一組,每個組的最開始的幾個頁面類型是固定的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM