Mysql 文件
Mysql 文件
1 参数文件
Mysql 启动时,会读一个配置参数文件,用来寻找数据库的各种文件所在的位置以及指定某些初始化参数。
如果找不到参数文件,Mysql 会用默认值代替。
2 日志文件
2.1 错误日志
错误日志在 Mysql 的启动、运行、关闭的过程中进行记录。记录了所有的错误信息,以及一些警告信息帮助优化 Mysql。
2.2 慢查询日志
超过指定阈值的 SQL 语句都会记录到慢查询语句中。
可以通过 select * from mysql.slow_log
重新慢查询的日志。
2.3 查询日志
查询日志记录了所有对 Mysql 数据库请求的信息,无论请求是否正确执行。
2.4 二进制日志
binary log
记录里对Mysql数据库执行更改的所有操作,但是不包括 SELECT
和 SHOW
这类查询操作。即使 UPDATE
操作本身没有导致数据变化,也会记录写入二进制文件。
2.4.1 作用
- 恢复:对一个数据库全备份文件后, 用户可以通过二进制日志进行按时间点恢复。
- 复制:通过复制和执行二进制日志使两台Mysql数据库实时同步。
- 审计:通过二进制日志中的信息进行审计,判断是否有数据库注入攻击。
2.4.2 事务
在使用事务时,InnoDB将所有未提交的二进制日志记录到一个缓存中,事务提交时直接将缓存中的二进制日志写入二进制日志文件。
2.4.3 二进制文件的格式
statement
, 日志的逻辑SQL语句,对于rand、uuid
等函数操作会造成主从服务器不一致,在数据库事务等级是READ COMMIT
的时候,会出现丢失更新的现象。- ROW,记录的是表行的更改情况。
- MIXED模式,Mysql自动选择是statement还是row格式。
3 表结构文件
对于每张表,Mysql 都以一个 frm
为后缀名的文件定义该表的表结构。
3.1 InnoDB存储引擎文件
3.1.1 表空间文件
InnoDB 对存储的数据按照表空间进行存放设计,在默认配置下有一个大小为10MB名为 ibdata1
的文件,该文件就是默认的表空间文件。也可以设置为每个表产生独立的表空间,命名为 表名 .ibd
。
3.1.2 重做日志文件
InnoDB 在存储引擎的数据目录下定义了 ib_logfile0
和 ib_logfile1
两个文件为重做日志文件。通过重做日志可以恢复数据。
每个 InnoDB 中至少有一个重做文件组,每个重做文件组下至少有两个重做日志文件。在每个文件组中两个重做文件大小一致,并以循环写入的方式运行。
3.1.3 与二进制日志的区别
二进制日志会记录所有与 Mysql 数据库相关的日志,记录的一个事务的具体操作内容,即改日志的逻辑日志。仅在事务提交前进行提交,即只写磁盘一次。
InnoDB 记录引擎本身的事务日志,记录的是关于每个页的更改的物理情况。在事务进行过程中不断被写入到重做日志中。

从重做日志写入磁盘是按照一个扇区一个扇区写入的,因此可以保证写入一个是成功的。