先看看磁盘结构的架构图
1). System Tablespace
系统表空间是更改缓冲区的存储区域。如果表是在系统表空间而不是每个表文件或通用表空间中创建 的,它也可能包含表和索引数据。(在
MySQL5.x
版本中还包含
InnoDB
数据字典、
undolog
等
)
参数:innodb_data_file_path
系统表空间,默认的文件名叫
ibdata1
。
2). File-Per-Table Tablespaces
如果开启了innodb_file_per_table开关 ,则每个表的文件表空间包含单个InnoDB表的数据和索引 ,并存储在文件系统上的单个数据文件中。
开关参数:innodb_file_per_table ,该参数默认开启。
3). General Tablespaces
通用表空间,需要通过 CREATE TABLESPACE 语法创建通用表空间,在创建表时,可以指定该表空间。
创建表空间:
CREATE TABLESPACE ts_name ADD DATAFILE 'file_name' ENGINE = engine_name;
创建表时指定表空:
CREATE TABLE xxx ... TABLESPACE ts_name;
4). Undo Tablespaces
撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(初始大小16M),用于存储undo log日志。
5). Temporary Tablespaces
InnoDB 使用会话临时表空间和全局临时表空间。存储用户创建的临时表等数据。
6). Doublewrite Buffer Files
双写缓冲区,innoDB引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。
7). Redo Log
重做日志,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log
buffer
)以及重做日志文件(
redo log
)
,
前者是在内存中,后者在磁盘中。当事务提交之后会把所
有修改信息都会存到该日志中
,
用于在刷新脏页到磁盘时
,
发生错误时
,
进行数据恢复使用。
以循环方式写入重做日志文件,涉及两个文件:
ib_logfile0和ib_logfile1