MySQL数据库和InnoDB引擎的各种类型文件:
- 参数文件:告诉MySQL在实例启动时在哪里找到数据库文件,保存某些初始化参数
- 日志文件:错误日志文件,二进制日志文件,慢查询日志文件(记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询),查询日志文件(记录建立的客户端连接和执行的语句)等
- socket文件:用UNIX socket方式连接时需要的文件
- pid文件:MySQL实例的进程ID文件
- MySQL表结构文件:存放MySQL表结构定义文件
- 存储引擎文件:保存存储引擎相关的文件,真正存储了记录和索引等数据。
参数文件
MySQL实例启动时读取的配置参数文件,用来寻找数据库的各种文件位置和指定某些初始化参数(一系列的key-value值)。
参数也分动态和静态参数
日志文件
记录数据库各种类型活动
错误日志
记录所有错误信息和一些警告/正确信息
慢查询日志
可以用来定位可能存在问题的SQL语句,来进行SQL语句层面的优化。他会把执行时间超过阈值的SQL记录起来。阈值参数long_query_time,默认10秒。如果某个SQL语句没有使用索引,也会记录在这里面,每分钟记录没用到索引的SQL语句次数可通过参数log_throttle_queries_not_using_indexes. 默认0无限制个数。
查询日志
记录所有对MySQL数据库请求的信息
二进制日志
记录了对MySQL数据库执行更改的所有操作,但不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。
默认情况下不会启动,需要手动指定参数来启动。
二进制日志的作用:
- 恢复:某些数据的恢复需要二进制文件,比如point-in-time恢复
- 复制:通过复制和执行二进制日志来实时同步远程MySQL和本地MySQL
- 审计:通过log来判断是否有对数据库进行注入攻击等
未提交时也有缓冲机制来缓存
socket文件
UNIX用socket方式连接时需要的文件,路径一般是/tmp/mysql.sock
pid文件
MySQL实例启动时会将自己的PID写入一个文件,即pid文件
表结构定义文件
MySQL数据的存储是根据表进行的,每个表都有与之对应的文件, MySQL都有一个以frm为后缀名的文件,该文件记录了该表的表结构定义。
InnoDB存储引擎文件
每个表存储引擎都有自己独立文件,包括redo log文件,表空间文件等。
表空间文件
InnoDB采用将存储的数据按表空间进行存放的设计。默认情况下会有一个10MB大小的表空间文件
重做日志文件
当数据库出现掉电等问题时,可以用redo log文件中存储的最新信息来保证数据的完整性。
每个InnoDB引擎至少有一个redo log日志文件组,每个组下至少有2个redo log文件。用户也可以设置其他的镜像文件来提高可用性和安全性。
redo日志会循环写入各个redo log文件,遍历完后又重头开始覆写。
写入redo log日志文件的操作不是直接写,而是先写入redo log buffer,再按照一定条件顺序来写入日志文件。redo log buffer写入redo log文件时每次写入的大小是最小扇区大小512byte,可以保证写入必定成功,不需要double write。