mysql技术内幕(三)文件

文件

  数据库和InnoDB 存储引擎表的各种类型文件。这些文件有以下这些。

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

3.1 参数文件

  当MySQL 实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。
  MySQL 数据库中的参数可以分为两类:

  • 动态( dynamic) 参数
  • 静态(static) 参数

  动态参数意味着可以在MySQL 实例运行中进行更改,静态参数说明在整个实例生命周期内都不得进行更改,就好像是只读(read only ) 的。

3.2 日志文件

  日志文件记录了影响MySQL 数据库的各种类型活动。MySQL 数据库中常见的日志文件有:

  • 错误日志(eηor log)
  • 二进制日志(binlog)
  • 慢查询日志(slow que叩log )
  • 查询日志(log)

3.2.1 错误日志

  错误日志文件对MySQL 的启动、运行、关闭过程进行了记录。该文件不仅记录了所有的错误信息,也记录一些警告信息或正确的信息。

3.2.2 慢查询日志

  慢查询日志(slow log) 可帮助DBA 定位可能存在问题的SQL 语句,从而进行SQL 语句层面的优化

3.2.3 查询日志

  查询日志记录了所有对MySQL 数据库请求的信息,无论这些请求是否得到了正确的执行。

3.2.4 二进制日志

  二进制日志( binary log) 记录了对MySQL 数据库执行更改的所有操作,但是不包括SELECT 和SHOW 这类操作,因为这类操作对数据本身并没有修改。然而,若操作本身并没有导致数据库发生变化,那么该操作可能也会写入二进制日志。

  二进制日志主要有以下几种作用。

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

3.3 套接字文件

  在UNIX 系统下本地连接MySQL 可以采用UNIX 域套接字方式,这种方式需要一个套接字(socket) 文件。套接字文件可由参数socket 控制

3.4 pid 文件

  当MySQL 实例启动时,会将自己的进程ID 写人一个文件中一一该文件即为pid 文件

3.5 表结构定义文件

  因为MySQL 插件式存储引擎的体系结构的关系, MySQL 数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论表采用何种存储引擎, MySQL 都有一个以frm 为后缀名的文件,这个文件记录了该表的表结构定义。frm 还用来存放视图的定义。

3.6 InnoDB 存储引擎文件

  每个表存储引擎还有其自己独有的文件。InnoDB 存储引擎密切相关的文件,包括重做日志文件、表空间文件。

3.6.1 表空间文件

  InnoDB 采用将存储的数据按表空间( tablespace) 进行存放的设计。在默认配置下会有一个初始大小为10MB , 名为ibdatal 的文件。该文件就是默认的表空间文件( tablespace file)。

3.6.2 重做日志文件

  在默认情况下,在InnoDB 存储引擎的数据目录下会有两个名为ib_logfileO 和iblogfile1 的文件。在MySQL 官方手册中将其称为InnoDB 存储引擎的日志文件,不过更准确的定义应该是重做日志文件(redo log file) 。它们记录了对于InnoDB 存储引擎的事务日志。
  当实例或介质失败(media failure) 时, 重做日志文件就能派上用场。例如,数据库由于所在主机掉电导致实例失败, InnoDB 存储引擎会使用重做日志恢复到掉电前的时
刻,以此来保证数据的完整性。每个InnoDB 存储引擎至少有1 个重做日志文件组(group) ,每个文件组下至少有2 个重做日志文件,如默认的ib_logfileO 和ib_logfile1 。为了得到更高的可靠性, 用户可以设置多个的镜像日志组( mirrored log groups ),将不同的文件组放在不同的磁盘上,以此提高重做日志的高可用性。在日志组中每个重做日志文件的大小一致, 并以循环写人的方式运行。InnoDB存储引擎先写重做日志文件1 当达到文件的最后Md至重做日志文件2 ,再当重做日志文件2 也被写满时,会再切换到重做日志文件1 中。

  记录事务日志, 和之前介绍的二进制日志有什么区别?

  • 1、二进制日志会记录所有与MySQL 数据库有关的日志记录,包括InnoDB 、MylSAM 、Heap 等其他存储引擎的日志。而InnoDB 存储引擎的重做日志只记录有关该存储引擎本身的事务日志。
  • 2、记录的内容不同,无论用户将二进制日志文件记录的格式设为STATEMENT还是, ROW , 又或者是MIXED ,其记录的都是关于一个事务的具体操作内容,即该日志是逻辑日志。而Inno DB 存储引擎的重做日志文件记录的是关于每个页( Page) 的更改的物理情况。
  • 3、写人的时间也不同, 二进制日志文件仅在事务提交前进行提交,即只写磁盘一次,不论这时该事务多大。而在事务进行的过程中,却不断有重做日志条目( redo entry )被写入到重做日志文件中。

3.7 小结

  与MySQL 数据库有关的文件中,错误文件和二进制日志文件非常重要。当MySQL 数据库发生任何错误时, DBA 首先就应该去查看错误文件,从文件提示的内容中找出问题的所在。当然,错误文件不仅记录了错误的内容,也记录了警告的信息,通过一些警告也有助于DBA对于数据库和存储引擎进行优化。
  二进制日志的作用非常关键,可以用来进行point in time 的恢复以及复制(replication) 环境的搭建。因此,建议在任何时候时都启用二进制日志的记录。从MySQL 5.1 开始, 二进制日志支持STATEMENT 、ROW 、MIX 三种格式,这样可以更好地保证从数据库与主数据库之间数据的一致性。
  最后介绍了和InnoDB 存储引擎相关的文件,包括表空间文件和重做日志文件。表空间文件是用来管理InnoDB 存储引擎的存储,分为共享表空间和独立表空间。重做日志非常的重要,用来记录InnoDB 存储引擎的事务日志,也因为重做日志的存在,才使得InnoDB 存储引擎可以提供可靠的事务。

你可能感兴趣的:(mysql)