InnoDB文件系统
- 参数文件:包括初始化参数,某种内存结构的大小等
- 日志文件:用来记录MySQL实例对某种条件做出响应式写入的文件
- socket文件:当用UNIX套接字方式进行连接时需要的文件
- pid文件:MySQL实例的进程ID文件
- MySQL表结构文件:存放MySQL表结构定义文件
- 存储引擎文件:每隔存储引擎都有自己的文件来保存各种数据
1 参数文件
用来寻找数据库的各种文件所在位置以及指定某些初始化参数
参数可以看作键值对,类型可以分为动态参数和静态参数,动态参数意味着在实例运行中可以更改,而静态的不能更改
2 日志文件
- 错误日志(error log):记录了所有错误信息和一些警告信息或正确信息
- 慢查询日志(slow log):可以定位存在问题的SQL语句,从而进行SQL语句的优化,例如
- long_query_time:将运行时间超过该阈值的SQL语句记录到日志中
- long_query_not_using_indexes:将没有使用索引的SQL语句记录到日志中
- log_throttle_queries_not_using_indexes:每分钟记录到日志且未使用索引的SQL语句次数
- log_output:指定慢查询输出的格式,FILE或者TABLE
- 查询日志(log):记录了所有对MySQL请求的信息,无论是否得到正确执行
- 二进制日志(binlog):记录了对MySQL执行更改的所有操作,不包括SELECT和SHOW,默认不开启,主要作用
- 恢复(recovery)
- 复制(replication)
- 审计(audit):用户可以通过二进制日志的信息进行审计,判断是否有注入攻击
3 套接字文件
在UNIX系统下本地连接MySQL可以采用UNIX域套接字方式,需要socket文件
4 pid文件
当MySQL实例启动时,会将自己的进程ID写入一个文件中
5 表结构定义文件
MySQL有一个以frm为后缀名的文件,记录了该表的表结构定义
6 InnoDB存储引擎文件
6.1 表空间文件
InnoDB采用将存储的数据按表空间进行存放的设计,所有基于该引擎的表的数据都会记录到该空间中
若设置了参数innodb_file_per_table,则每个表会产生一个独立表空间,这些单独的表空间文件仅存储该表的数据、索引、插入缓冲等信息,其余信息还是存放在默认的表空间中
6.2 重做日志文件
每个InnoDB存储引擎至少有1个重做日志文件组,每个文件组下至少有2个重做日志文件,日志组中每个重做日志文件大小一致,以循环写入的方式运行
与二进制日志的区别之一:写入时间不同,二进制日志文件仅在事务提交前进行提交,而在事务进行过程中也会有重做日志条目被写入重做日志文件