MySQL之文件


1.参数文件

  当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在的位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。在默认轻快下,MySQL实例会按照一定的顺序在指定的位置进行读取,用户只需要通过命令mysql --help | grep my.cnf 来寻找即可

 1.1参数类型

  MySQL数据库中的参数可以分为两类:

  • 动态参数
  • 静态参数 

  动态参数意味着可以在MySQL实例中进行更改,静态则不能。可以通过SET命令对动态的参数值进行修改,语法如下:

  set [global | session] key = value

  其中global和session关键字表明该参数的修改是基于当前会话还是整个实例的生命周期。需要注意的是,即使使用global对变量的全局值进行了修改,但MySQL实例本身不会对参数文件中的该值进行修改,也就是说,在下次启动时MySQL实例还是会读取参数文件。如果想保留修改,可以直接自行修改参数文件。

2.日志文件

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

  • 错误日志
  • 二进制日志
  • 慢查询日志
  • 查询日志

 2.1错误日志

  错误日志文件对MySQL的启动、运行、关闭过程进行了记录。在遇到问题时可以通过错误日志定位问题,该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息。可以通过命令 SHOW VARIABLES LIKE 'log_error' 来定位该文件

 2.2慢查询日志

  慢查询日志可以帮助我们定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中。每隔一段时间对其进行检查,确认是否有SQL语句需要优化。改阈值可以通过参数 long_query_time 来设置,默认值为10,代表10秒。

  在默认情况下,MySQL数据库不会启动慢查询日志,需要手动将 log_slow_queries 这个参数设置为ON。

 2.3查询日志

  查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。默认文件名为:主机名.log。

 2.4二进制日志

  二进制日志记录了对MySQL数据库执行更改的所有操作,其实这次更改操作并没有导致数据库发生变化。二进制日志主要有以下几种作用。

  • 恢复:某些数据的恢复需要二进制日志。例如,在一个数据库全备文件恢复后,可以通过二进制日志进行 point-in-time 的恢复
  • 复制:原理与恢复类似,通过复制和执行二进制日志时一台原创的MySQL数据库(slave)与一台MySQL数据库(master)进行试试同步
  • 审计:可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击

3.套接字文件

  在UNIX系统下本地连接MySQL可以采用UNIX域套接字方式,这种方式需要一个套接字(socket)文件。套接字文件可由参数socket控制。一般在 /tmp 目录下,名为 mysql.sock

4.pid文件

  当MySQL实例启动时,会将自己的进程ID写入pid文件中,该文件可由参数 pid_file 控制,默认位于数据库目录下,文件名为 主机名.pid

5.表结构定义文件

  因为MySQL插件式存储引擎的体系结构的关系,MySQL数据的存储是更具表进行的,每个表都会有对应的文件。但不论表采用什么存储引擎,MySQL都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。

  frm还用来存放视图的定义,该文件是文本文件,可以直接使用 cat 命令进行查看

6.存储引擎文件(InnoDB)

 6.1表空间文件

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

 6.2重做日志文件

  在默认情况下,在InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件。当实例或介质失败时,InnoDB存储引擎会使用重做日志恢复到失败前的时刻,以此来保证数据的完整性。

  每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件。为了得到更高的可靠性,也可以设置多个镜像日志组,将不同的文件组放在不同的磁盘上。

摘自MySQL技术内幕InnoDB存储引擎第2版