MySQL與Oracle一樣都是通過邏輯存儲結構來管理物理存儲結構,即管理硬盤上存儲的各種文件。下面將詳細介紹InnoDB存儲引擎中的數據文件和重做日誌文件。
一、數據文件
“.ibd”文件和ibdata文件 這兩種文件都是存放Innodb數據的文件,之所以有兩種文件來存放Innodb的數據(包括索引),是因為 Innodb 的數據存儲方式能夠通過配置來決定是使用共享表空間存放存儲數據,還是獨享表空間存放存儲數據。
視頻講解如下:
https://www.bilibili.com/video/BV1hnadeUERt/?aid=112906888809...
提示:當使用innodb存儲引擎時,如果再配置文件中沒有配置innodb_file_per_table,默認情況下,所有庫中的所有使用innodb存儲引擎的表示數據都存在‘ibdata1’這個文件中,表的數據信息和索引信息都存儲在ibdata1中,但是如果開啓了innodb_file_per_table參數,表示每個innodb表類型的表使用單獨的表空間數據文件。
二、重做日誌文件(redo log)
redo log是InnoDB存儲引擎層生成的日誌,主要為了保證數據的可靠性和事務的持久性。視頻講解如下:
https://www.bilibili.com/video/BV1b4YTe5E2Q/?aid=112914572838...
每個redo log默認的大小是1G,由參數“innodb_log_file_size”參數決定。
mysql> show variables like "innodb_log_file_size";
# 輸出的信息如下:
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| innodb_log_file_size | 1073741824 |
+----------------------+------------+
而redo log文件存放的路徑由參數“innodb_log_group_home_dir”決定。
mysql> show variables like "innodb_log_group_home_dir";
# 輸出的信息如下:
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_group_home_dir | ./ |
+---------------------------+-------+
redo log文件與MySQL的數據文件默認存放在同一個目錄下。通過下面方式可以進行查看:
[root@mysql11 data]# pwd
/usr/local/mysql/data
[root@mysql11 data]# ll ib_logfile*
-rw-r-----. 1 mysql mysql 1073741824 Feb 20 20:11 ib_logfile0
-rw-r-----. 1 mysql mysql 1073741824 Feb 19 11:22 ib_logfile1
# 這裏可以看到有兩個ib_logfile開頭的文件,它們就是log group中的redo log file。
MySQL與Oracle一樣都採用重做日誌組的方式來管理redo log。一個組內由多個大小完全相同的redo log file組成,組內redo log file的數量由變量 “innodb_log_files_group”決定,默認值為2。
mysql> show variables like "innodb_log_files_in_group";
# 輸出的信息如下:
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 |
+---------------------------+-------+