介紹
前面博客Mysql常用文件介紹了InnoDB采用表空間的方式存儲數據。Mysql5.5版本默認配置情況下初始化一個12M的ibdata1文件。我們也可以根據需要設置多個,使用參數innodb_data_file_path來配置。
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
共享表空間:如果我們沒有開啟innodb_file_per_table參數那么數據將都會寫入到ibdata1文件之中,如果超過了12M,那么還可以自動增長容量。
共享表空間.png
獨立表空間:如果我們開啟innodb_file_per_table參數那么表文件空間就會創建于自己的數據文件中,而非創建于共享表空間中。每個數據庫會創建一個自己對應的獨立表空間。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| single-app-db |
| sunpy-quartz |
| sys |
+--------------------+
6 rows in set (0.00 sec)
single-app-db數據庫的獨立表空間.png
[root@izuf6ea4rfo45y44oj74jhz mysql]# cd single\@002dapp\@002ddb/
[root@izuf6ea4rfo45y44oj74jhz single@002dapp@002ddb]# ll
total 253976
-rw-r----- 1 mysql mysql 61 Jan 5 18:16 db.opt
-rw-r----- 1 mysql mysql 8766 Jan 5 21:37 single_user.frm
-rw-r----- 1 mysql mysql 260046848 Jan 11 17:48 single_user.ibd
-rw-r----- 1 mysql mysql 1085 Jan 13 13:49 v.frm
說明:single_user.frm是定義的表結構的文件。single_user.ibd是表的索引文件和數據文件。
問題
如果啟用innodb_file_per_table這個參數就不會創建共享表空間了嗎?
開啟了這個參數只是表結構、索引和數據文件會存放到獨立表空間。而向事務中的undo回滾日志以及redo的log buffer等依然還是會存放到共享表空間。