- 参数文件
MySql
数据库的参数分为两类,动态参数和静态参数。动态参数意味着可以在MySQL
实例运行中进行更改,静态参数说明在整个实例声明周期内都不得进行更改,就好像是只读的。可以通过set
命令对动态参数进行修改。
- 日志文件
日志文件包括错误日志、慢查询日志、二进制日志和查询日志。
错误日志文件对MySQL
的启动、运行和关闭过程进行了记录。
慢查询日志,在MySQL
启动时有一个阈值,会将运行时超过该阈值的所有sql
语句都记录到慢查询日志文件中。该阈值可以通过参数long_query_time
来设置,默认值为10
,代表10
秒。还可以通过额外的参数long_query_io
将超过指定逻辑IO
次数的SQL
记录到slow log
中,该值默认为100
,即表示对逻辑读取次数大于100
的sql
语句,记录到slow log
中。
二进制日志(binary log
),记录了对MySQL
数据库执行更改的所有操作,但是不包括SELECT
和SHOW
这类操作,因为这类操作对数据本身并没有修改。二进制日志文件在默认情况下并没有启动,需要手动指定参数来启动。
- 表结构定义文件
不论表采用何种存储引擎,MySQL
都有一个以frm
为后缀名的文件,这个文件记录了该表的表结构定义。
InnoDB
存储引擎文件
InnoDB
存储引擎文件包括重做日志文件、表空间文件。
InnoDB
采用将存储的数据按表空间进行存放的设计。在默认配置下会有一个初始大小为10MB
,名为ibdata1
的文件,该文件就是默认的表空间文件。
在默认情况下,在InnoDB
存储引擎的数据目录下会有两个名为ib_logfile0
和ib_logfile1
的文件,这就是重做日志文件,它们记录了InnoDB
存储引擎的事务日志。每个InnoDB
存储引擎至少有1个重做日志文件组(group
),每个文件组下至少有两个重做日志文件,如默认的ib_logfile0
和ib_logfile1
。参数innodb_log_file_size
指定每个重做日志文件的大小。参数innodb_log_files_in_group
指定了日志文件组中重做日志文件的数量,默认为2
。一方面重做日志不能设置的太大,如果设置的很大,在恢复时可能需要很长的时间。另一方面又不能设置的很小,否则可能导致一个事务的日志需要很多次切换重做日志文件,重做日志文件太小还会导致频繁地发生async checkpoint
,导致性能的抖动。
首先,二进制日志会记录所有与MySQL数据库有关日志记录,包括InnoDB
、MyISAM
、Heap
等其他存储引擎的日志。而InnoDB
存储引擎的重做日志只记录有关该存储引擎本身的事务日志。其次,记录的内容不同,无论用户将二进制日志文件记录的格式设为statement
还是row
,又或者是mixed
,其记录的都是关于一个事务的具体操作内容,即该日志是逻辑日志。而InnoDB
存储引擎的重做日志文件记录的是关于每个页(page
)的更改的物理情况。
写入重做日志文件的操作不是直接写,而是先写入一个重做日志缓冲(redo log buffer
)中,然后按照一定的条件顺序地写入日志文件。从重做日志缓冲往磁盘写入时,是按512
个字节,也就是一个扇区的大小进行写入。因为扇区是写入的最小单位,因此可以保证写入必定是成功的。因此在重做日志的写入过程中不需要有doublewrite
。