InnoDB存储引擎:文件
引用
在 mysql数据库的生命周期当中,有许多的文件起着重要的作用。本章将会介绍这些具体的文件。
- 参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。
- 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等。□ socket文件:当用UNIX域套接字方式进行连接时需要的文件。
- pid文件:MySQL实例的进程ID文件。
- MySQL表结构文件:用来存放MySQL表结构定义文件。
- 存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据。这些存储引擎真正存储了记录和索引等数据。本章主要介绍与InnoDB有关的存储引擎文件。
参数文件
mysql在启动时,会去固定的几个地方找配置参数的文件。可以通过mysql --help | grep my.cnf来查看,都会去哪些地方查找。如果找到多份,会以后面的参数项覆盖前面的。
mysql的参数分为动态和静态的,静态的参数不允许运行期间对其修改,动态的参数只在本次生命周期内有效。
设置的参数可以选择是对本次会话有效还是全局有效
日志文件
包括:错误日志,慢查询日志,查询日志,二进制日志
错误日志
主要用来记录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_log_file_size。指每个重做日志的大小
- innodb_log_files_in_group 日志文件组内的重做日志文件的数量
- innodb_mirrored_log_groups 日志镜像文件组的数量
- innodb_log_group_home_dir 日志租的路径
重做日志条目结构
- redo_log_type占用1个字节,表示重做日志的类型
- space表示表空间的id,但采用压缩的方式,因此占用的空间可能小于4字节
- page_no表示页偏移量,采用压缩的方式
- redo_log_body表示每个重做日志的数据部分,恢复时需要调用相应的函数解析
重做日志写入过程
从重做日志缓冲往磁盘写入时,是按512个字节,也就是一个扇区的大小进行写入。因为扇区是写入的最小单位,因此可以保证写入必定是成功的。因此在重做日志的写入过程中不需要有doublewrite。