InnoDB存储引擎:文件

引用

在 mysql数据库的生命周期当中,有许多的文件起着重要的作用。本章将会介绍这些具体的文件。

  • 参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。
  • 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。□ socket文件:当用UNIX域套接字方式进行连接时需要的文件。
  • pid文件:MySQL实例的进程ID文件。
  • MySQL表结构文件:用来存放MySQL表结构定义文件。
  • 存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据。这些存储引擎真正存储了记录和索引等数据。本章主要介绍与InnoDB有关的存储引擎文件。

参数文件

mysql在启动时,会去固定的几个地方找配置参数的文件。可以通过mysql --help | grep my.cnf来查看,都会去哪些地方查找。如果找到多份,会以后面的参数项覆盖前面的。
mysql的参数分为动态和静态的,静态的参数不允许运行期间对其修改,动态的参数只在本次生命周期内有效。
设置的参数可以选择是对本次会话有效还是全局有效
InnoDB存储引擎:文件

日志文件

包括:错误日志,慢查询日志,查询日志,二进制日志

错误日志

主要用来记录mysql 启动 运行 关闭时的错误日志。可以通过SHOW VARIABLES LIKE 'log_error’来定位该文件。

慢查询日志

慢查询日志用来记录定义为慢查询的日志。该日志是记录在mysql.slow_log表中

查询日志

查询日志记录了对数据库的访问信息。该日志是记录在mysql.general_log表中

二进制日志

记录了对数据库执行更改的所有操作。不包括select和show这类操作

作用:

  • 恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
  • 复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步。
  • 审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。

InnoDB存储引擎文件

之前的文件是MySQL数据库的文件,与存储引擎无关。存储引擎也会有自己的文件。innodb的文件包含重做日志文件和表空间文件

表空间文件
InnoDB采用将存储的数据按表空间进行存放。文件名为ibdata1的文件,是默认的表空间文件。
InnoDB存储引擎:文件
innodb存储引擎对于文件的存储方式
InnoDB存储引擎:文件

重做日志文件

  • innodb_log_file_size。指每个重做日志的大小
  • innodb_log_files_in_group 日志文件组内的重做日志文件的数量
  • innodb_mirrored_log_groups 日志镜像文件组的数量
  • innodb_log_group_home_dir 日志租的路径

重做日志条目结构
InnoDB存储引擎:文件

  • redo_log_type占用1个字节,表示重做日志的类型
  • space表示表空间的id,但采用压缩的方式,因此占用的空间可能小于4字节
  • page_no表示页偏移量,采用压缩的方式
  • redo_log_body表示每个重做日志的数据部分,恢复时需要调用相应的函数解析

重做日志写入过程
InnoDB存储引擎:文件
从重做日志缓冲往磁盘写入时,是按512个字节,也就是一个扇区的大小进行写入。因为扇区是写入的最小单位,因此可以保证写入必定是成功的。因此在重做日志的写入过程中不需要有doublewrite。