介绍
前面博客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,那么还可以自动增长容量。
独立表空间:如果我们开启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)
[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等依然还是会存放到共享表空间。