mysql错误日志与查询日志有什么区别_mysql日志类型对比

胖宇吖_9359

胖宇吖_9359

2026-03-24

164人浏览

原创

错误日志只记录mysql启动、运行、关闭中的严重问题(如启动失败、innodb恢复异常),不记录sql执行过程;查询日志全量记录所有客户端请求(含连接、sql、断开),用于审计但性能代价高;慢查询日志专为性能优化设计,仅记录执行超时语句,需重点关注lock_time和rows_examined;binlog是逻辑变更日志,用于复制和恢复,与诊断类日志无重叠。

mysql错误日志与查询日志有什么区别_mysql日志类型对比

错误日志只记“出事了”,不记正常操作

错误日志(error log)是 MySQL 启动、运行、关闭过程中发生严重问题时的“事故报告”,比如 mysqld 启动失败、InnoDB 恢复异常、权限校验崩溃、磁盘满写入失败等。它**不记录任何 SQL 语句执行过程**,哪怕一条 SELECT 1 执行出错(如因 OOM 被 kill),也只会记成类似 Got an error reading communication packets 这类底层通信异常,而非你写的那条 SQL。

关键点:

  • log_error 控制路径,默认常为 /var/log/mysqld.log 或 /var/lib/mysql/hostname.err,必须有 MySQL 进程可写权限
  • 它是唯一默认开启的日志,且无法关闭(仅能重定向或丢弃到 /dev/null,但不推荐)
  • log_error_verbosity 决定记录级别(1=ERROR,2=WARNING+ERROR,3=INFO+WARNING+ERROR),生产环境建议设为 2,避免 INFO 级别刷屏
  • 时间戳默认不开启(log_error_includes_timestamp=OFF),务必打开,否则排查多条错误时会抓瞎

查询日志记“所有请求”,连连接断开都写进去

查询日志(general query log)是全量审计型日志:客户端连上来、发了什么 SQL(包括 SELECT、SHOW、SET)、甚至断开连接,全部原样记录。它不是为了查错,而是为了“还原现场”——比如开发说“我明明没改数据”,你翻日志发现他执行了 UPDATE ... WHERE id=1 却忘了加条件。

但它代价极高:

  • 每条语句触发一次磁盘 I/O(即使 log_output=TABLE,写入 mysql.general_log 表仍需刷盘)
  • 默认关闭,开启后 QPS 下降明显,高并发场景可能直接拖垮性能
  • 日志体积爆炸快,general_log_file 若不配轮转或定期清理,几天就能占满磁盘
  • 敏感信息裸露:密码若在 SET PASSWORD 里、token 若在注释中,全都会明文记下

慢查询日志才是性能优化的“真眼”

很多人误把查询日志当性能分析工具,其实它太重又太杂;真正该盯的是慢查询日志(slow query log)。它只记录执行时间 ≥ long_query_time 的语句(默认 10 秒),且可精确到微秒(MySQL 5.7+ 支持 long_query_time=0.1)。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

实操注意:

  • 必须手动开启:slow_query_log=1,否则永远为空
  • long_query_time 是**语句实际执行耗时**,不含排队、网络延迟;想抓锁等待高的语句,得配合 log_queries_not_using_indexes=ON
  • 存储方式选 FILE 还是 TABLE?文件更轻量,但 SELECT * FROM mysql.slow_log 查起来方便;不过表模式默认不带索引,查历史得先 ALTER TABLE mysql.slow_log ADD INDEX (start_time)
  • 别只看 Query_time,重点看 Lock_time(锁等待)和 Rows_examined(扫描行数),前者高说明有锁争用,后者高说明缺索引或写了 SELECT *

二进制日志(binlog)根本不在一个维度上

binlog 不是“诊断日志”,而是“变更流水账”:它只记 DDL(CREATE、ALTER)和 DML(INSERT、UPDATE、DELETE),且是逻辑日志(SQL 或行变更事件),用于主从复制和基于时间点的恢复。它和错误日志、查询日志完全不重叠——错误日志不会告诉你 binlog 写失败了哪一行,查询日志也不会显示 binlog 记了什么。

容易混淆的点:

  • binlog 默认 MySQL 8.0+ 开启,但错误日志里若出现 Failed to open log file,八成是 log_bin 路径磁盘满或权限不对,而不是 error log 本身出问题
  • binlog_format=ROW 时,binlog 体积远大于 STATEMENT,但能规避函数不确定性问题;而错误日志里若频繁报 Could not execute Write_rows event,大概率是主从表结构不一致
  • 清 binlog 用 PURGE BINARY LOGS,千万别用 rm -f 直删文件,否则 MySQL 会卡死或复制中断

真正要动手配日志时,先问自己:是要定位启动失败(只看 log_error),还是要审计谁删了数据(开 general_log 但限定时间窗口),还是想压测后找瓶颈(开 slow_query_log 并调低 long_query_time)——日志不是越多越好,是刚好够用,且留痕可控。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2073

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1279

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

735

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2792

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

4628

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1079

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4911

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4382

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

5714

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 285人学习