Innodb使用一个虚拟文件系统-表空间(tablespace)来存储数据表和索引,用户同时可以通过制定innodb_file_per_table为每一个innnodb数据表分别创建一个表空间文件。在设置了这个选项并重新启动MySQL服务器之后,这个选项只对新建的InnoDB数据表起作用,此前创建的InnoDB数据表仍然将集中存储在原来的表空间中,它被称为主空间或者主表空间,此后关于新表的所有数据和所有索引都会存储在$datadir/databasename/tablename.ibd文件中。
与以前只有一个表空间文件的做法相比,这一改进带来了许多的好处。使用单表空间的做法优势在于当使用主表空间的时候,因为主表空间是一个封闭的文件系统,它的大小只增不减,使用单表空间,当执行drop table命令时会立刻释放掉该表所占据的空间。
下面是我的数据库德文件结构/data/mysql_3306
ibdata
ibdata1(1.0G)
ibdata2(1.0G)
iblogs
ib_logfile0(1.0G)
ib_logfile1(1.0G)
var
err.log
fb-bin.000001......fb-bin.000020
fb-bin.index
mysql(table name)
task(table name)
test(table name)
user_born.frm
user_born.ibd
user_born.TRG
user_born_before_insert.TRN
......
TJSJHL196-139.opi.com.err
TJSJHL196-139-slow.log
frm文件 ,存储数据表的框架结构,文件名与表名相同,每个表对应一个同名frm文件,与操作系统和存储引擎无关,即不管MySQL运行在何种操作系统上,使用何种存储引擎,都有这个文件。
ibd文件,ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引。InnoDB数据库文件(即InnoDB文件集,ib-file set),该文件一般存在在mysql的数据目录下,如:ibdata1、ibdata2等系统表空间文件,存储InnoDB系统信息和用户数据库表数据 和索引,所有表共用。
TRG文件 ,与触发器有关系,内容保存的是触发器的定义,如下所示:
TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` trigger user_before_insert before insert on user for each row begin insert into user_update values(new.id,new.name,CURTIME());end' 'C
REATE DEFINER=`root`@`localhost` trigger user_before_update before update on user for each row begin insert into user_update values(new.id,new.name,CURTIME());end'
sql_modes=0 0
definers='root@localhost' 'root@localhost'
引用“22.5.7: Where are triggers stored?
Triggers for a table are currently stored in .TRG
files, with one such file one per table.
”
地址:http://dev.mysql.com/doc/refman/5.0/en/faqs.html
TRN文件 ,与触发器有关系,但是内容保存的不是触发器的内容,而是如下所示:
TYPE=TRIGGERNAME
trigger_table=user