官方教程: http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb
3.6 InnoDB存储引擎文件
之前介绍的文件都是MySQL数据库本身的文件,和存储引擎无关。除了这些文件外,每个表存储引擎还有其自己独有的文件。这一节将具体介绍和InnoDB存储引擎密切相关的文件,这些文件包括重做日志文件、表空间文件。
3.6.1 表空间文件
InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放。默认配置下,会有一个初始化大小为10MB、名为ibdata1的文件。该文件就是默认的表空间文件(tablespace file)。你可以通过参数innodb_data_file_path对其进行设置。格式如下:
innodb_data_file_path=datafile_spec1[;datafile_spec2]…
你也可以用多个文件组成一个表空间,同时制定文件的属性,如:
[mysqld]
innodb_data_file_path = /db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend
这里将/db/ibdata1和/dr2/db/ibdata2两个文件用来组成表空间。若这两个文件位于不同的磁盘上,则可以对性能带来一定程度的提升。两个文件的文件名后都跟了属性,表示文件idbdata1的大小为2000MB,文件ibdata2的大小为2000MB,但是如果用满了这2000MB后,该文件可以自动增长(autoextend)。
设置innodb_data_file_path参数后,之后对于所有基于InnoDB存储引擎的表的数据都会记录到该文件内。而通过设置参数innodb_file_per_table,我们可以将每个基于InnoDB存储引擎的表单独产生一个表空间,文件名为表名.ibd,这样不用将所有数据都存放于默认的表空间中。下面这台服务器设置了innodb_file_per_table,可以看到:
mysql> show variables like ‘innodb_file_per_table’G;
*************************** 1. row ***************************
Variable_name: innodb_file_per_table
Value: ON
1 row in set (0.00 sec)
mysql> system ls -lh /usr/local/mysql/data/member/*
-rw-r—– 1 mysql mysql 8.7K 2009-02-24 /usr/local/mysql/data/member/ Profile.frm
-rw-r—– 1 mysql mysql 1.7G 9月 25 11:13 /usr/local/mysql/data/member/ Profile.ibd
-rw-rw—- 1 mysql mysql 8.7K 9月 27 13:38 /usr/local/mysql/data/member/t1.frm