MySQL体系架构解析(五):读懂MySQL日志文件是优化与故障排查的关键

发布于:2025-06-11 ⋅ 阅读:(60) ⋅ 点赞:(0)

MySQL文件

日志文件

在服务器运行过程中,会产生各种各样的日志,比如常规的查询日志,错误日志、二进制日志、 redo 日志和 Undo 日志等,日志文件记录了影响 MySQL 数据库的各种类型活动。

常见的日志文件有:错误日志(error log)、慢查询日志(slow query log)、查询日志(query log)、二进制文件(bin log)。

错误日志

错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录。遇到问题时,应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确信息。

用户可以通过下面命令来查看错误日志文件的位置

show variables liek 'log_error' \G;

在这里插入图片描述
当 MySQL 不能正常启动时,第一个必须查找的文件应该就是错误日志文件,该文件记录了错误信息。

慢查询日志

慢查询日志可以帮助定位可能存在问题的 SQL 语句,从而进行 SQL 语句层面的优化。
我们已经知道了慢查询日志可以帮我们定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。但是默认值是关闭的,需要我们手动开启。

show variables like 'slow_query_log';

在这里插入图片描述

-- 开启慢日志查看 0关闭 1开启
set global slow_query_log = 1;

慢是广义的概念,到底多慢算慢呢?MySQL中设定了一个阈值,将运行时间超过改值的所有SQL语句都记录到慢查询日志中。long_query_time 参数的值就是这个阈值。默认是10,代表是10秒。

show variables like 'long_query_time';

在这里插入图片描述
当然也可以设置

set global long_query_time = 0;

默认10秒,这里为了演示方便设置为0。
同时对于运行的SQL语句没有使用索引,MySQL 数据库也可以将这条SQL语句记录到慢查询日志文件。

-- 未使用索引是否记录慢查询日志参数 0关闭(默认) 1开启
show variables like '%log_queries_not_using_indexes%';

在这里插入图片描述

记录的慢查询日志在哪里看呢?这里还有一个参数控制。

show variables like '%slow_query_log_file%';

windows
在这里插入图片描述
linux
在这里插入图片描述

查询日志

查询当前的通用日志文件是否开启

show variables like '%general_log%';

在这里插入图片描述

-- 开启通用日志查询
set global general_log = on;
-- 关闭通用日志查询
set global general_log = off;

在这里插入图片描述
查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。
默认文件名:hostName.log,比如centosvm.log
在这里插入图片描述

二进制日志(binlog)

二进制日志记录了所有的 DDL 和 DML 语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗时间,MySQL 的二进制日志是事务安全型的。它有以下几种作用。

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

log-bin 参数用来控制是否开启二进制日志,默认为关闭。如果想要开启二进制日志功能,可以在MySQL的配置文件中指定如下格式
“name”为二进制日志文件的名称
如果不提供name,那么数据库会使用默认的日志文件名(文件名为主机名,后缀名为二进制日志的序列号),且文件保存在数据库所在的目录(datadir下)
启用/设置二进制日志文件(name可省略)
log-bin=name;
配置以后,就会在数据目录下产生类似于:
在这里插入图片描述
bin_log.00001即为二进制日志文件;bin_log.index为二进制的索引文件,用来存储过往产生的二进制日志序号,通常情况下,不建议手动修改这个文件。

二进制日志文件在默认情况下并没有启动,需要手动指定参数来启动。开启这个选项会对MySQL的性能造成影响,但是性能损失十分有限。根据MySQL官方手册中的测试说明,开启二进制日志会使性能下降1%。

show variables like 'log_bin';

在这里插入图片描述
mysql安装目录下修改my.cnf

log_bin=mysql-bin
binlog-format=ROW
server-id=1
expire_logs_days =30

在这里插入图片描述
在这里插入图片描述

其他的数据文件

除了我们上边说的这些用户自己存储的数据以外,数据文件下还包括为了更好运行程序的一些额外文件,当然这些文件不一定会放在数据目录下,而且可以在配置文件或者启动时另外指定存放目录。主要包括以下这几种类型的文件。

  • 服务器进程文件
    我们知道每运行一个MySQL服务器程序,都意味着启动一个进程。MySQL服务器会把自己的进程ID写入到一个pid文件中。
  • socket文件
    当用UNIX域套接字方式进行连接时需要的文件。

在这里插入图片描述

  • 默认/自动生成的SSL和RSA证书和密钥文件
    在这里插入图片描述