[MySQL]InnoDB文件介紹 MySQL一個顯著的特點是其可插拔的存儲引擎,因此MySQL文件分為兩種,一種是和MySQL數據庫本身相關的文件,一種是和存儲引擎相關的文件。本文主要介紹和InnoDB存儲引擎相關的文件。 表空間文件 InnoDB在存儲上也模仿了Oracle的設計,數據按表空間進行存儲,但是和Oracle不一樣的是,Oracle的表空間是個邏輯的概念,而InnoDB的表空間是個物理的概念。 你可以通過參數innodb_data_file_path來設置默認的表空間文件,所有基於InnoDB存儲引擎的表都會存儲在該文件內。如果你想基於每個表單獨生成一個表空間文件,可以設置參數innodb_file_per_table為ON,這樣表的數據、索引和插入緩沖等消息存儲在單獨的表空間文件中,但其余信息還是存儲在默認的表空間文件中。 下圖顯示了表空間文件的存儲方式: 上圖中主要有以下幾種存儲文件: 1)表結構定義文件(.frm):MySQL裡每個表和每個視圖都有一個對應的.frm文件用於記錄表和視圖的定義。注意:該文件和存儲引擎無關,屬於MySQL數據庫本身的文件。 2)默認表空間文件(ibdata) 3)單獨表空間文件(.ibd) 重做日志文件 重做日志文件對InnoDB存儲引擎至關重要,記錄了事務日志,如果數據庫由於宕機導致實例失敗,重新啟動時,就可以利用重做日志恢復到宕機前的一致性狀態。 MySQL的重做日志和Oracle的很類似,通過循環的方式覆蓋重用,下圖顯示了一個擁有3個重做日志文件的重做日志文件組: 這裡有個疑問,同樣是記錄事務日志,InnoDB的重做日志文件和MySQL自身的二進制文件有什麼區別?它們的區別主要有以下三點: 1)首先,范圍不同。二進制文件記錄所有與MySQL相關的日志記錄,包括InnoDB,MyISAM,Heap等存儲引擎的日志。而InnoDB的重做日志只記錄InnoDB相關的事務日志。 2)其次,內容不同。二進制文件記錄的是關於一個事務的具體操作內容,而InnoDB的重做日志記錄每個數據頁(page)更改的物理情況。 3)寫入的時間不同。二進制文件在事務提交之前記錄,在事務進行過程中,不斷有重做日志條目寫入重做日志文件中。