跳至主要內容

Mysql 文件

blacklad大约 3 分钟MysqlMysqlMysql 技术内幕

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数据库执行更改的所有操作,但是不包括 SELECTSHOW 这类查询操作。即使 UPDATE 操作本身没有导致数据变化,也会记录写入二进制文件。

2.4.1 作用

  1. 恢复:对一个数据库全备份文件后, 用户可以通过二进制日志进行按时间点恢复。
  2. 复制:通过复制和执行二进制日志使两台Mysql数据库实时同步。
  3. 审计:通过二进制日志中的信息进行审计,判断是否有数据库注入攻击。

2.4.2 事务

在使用事务时,InnoDB将所有未提交的二进制日志记录到一个缓存中,事务提交时直接将缓存中的二进制日志写入二进制日志文件。

2.4.3 二进制文件的格式

  1. statement, 日志的逻辑SQL语句,对于 rand、uuid 等函数操作会造成主从服务器不一致,在数据库事务等级是 READ COMMIT 的时候,会出现丢失更新的现象。
  2. ROW,记录的是表行的更改情况。
  3. MIXED模式,Mysql自动选择是statement还是row格式。

3 表结构文件

对于每张表,Mysql 都以一个 frm 为后缀名的文件定义该表的表结构。

3.1 InnoDB存储引擎文件

3.1.1 表空间文件

InnoDB 对存储的数据按照表空间进行存放设计,在默认配置下有一个大小为10MB名为 ibdata1 的文件,该文件就是默认的表空间文件。也可以设置为每个表产生独立的表空间,命名为 表名 .ibd

3.1.2 重做日志文件

InnoDB 在存储引擎的数据目录下定义了 ib_logfile0ib_logfile1 两个文件为重做日志文件。通过重做日志可以恢复数据。

每个 InnoDB 中至少有一个重做文件组,每个重做文件组下至少有两个重做日志文件。在每个文件组中两个重做文件大小一致,并以循环写入的方式运行。

3.1.3 与二进制日志的区别

二进制日志会记录所有与 Mysql 数据库相关的日志,记录的一个事务的具体操作内容,即改日志的逻辑日志。仅在事务提交前进行提交,即只写磁盘一次。

InnoDB 记录引擎本身的事务日志,记录的是关于每个页的更改的物理情况。在事务进行过程中不断被写入到重做日志中。

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

上次编辑于:
贡献者: blacklad