MySQL日志


一、MySQL 日志简介

MySQL 日志除了用于发现错误之外,它在数据复制、数据恢复、操作审计、以及数据永久性和一致性方面都发挥着重要作用。学会如何查看和配置 MySQL 日志,将有效的提升您的数据库技能和快速解决问题的能力。

MySQL8 数据库主要有六种类型的日志文件,用来存储不同的信息,分别是:

  • 二进制日志:记录更改数据的语句,用于数据同步和无损恢复;
  • 错误日志 :记录 MySQL 服务异常,用于解决服务器故障;
  • 通用查询日志:记录客户端连接发送给数据库的操作指令;
  • 慢查询日志:记录超过指定时间的查询语句,方便优化 SQL;
  • 中继日志:主从架构,从服务器读取中继日志同步主服务器数据;
  • 数据定义语句日志:记录数据定义执行的元数据操作。

MySQL 日志是排查数据库问题、优化性能和保障数据安全的重要工具

以下是 MySQL 中常见的日志类型及其核心知识点:

二、核心日志类型

1. 错误日志(Error Log)

  • 作用:记录 MySQL 服务器启动、运行、停止时的错误信息、警告和状态信息。
  • 启用:默认启用,无需额外配置。
  • 配置
  • 日志路径:通过 show variables like 'log_error'; 查看(通常为 data目录/主机名.err 或自定义路径)。
  • 用途:排查启动失败、连接问题、磁盘空间不足等服务器级故障。
  • 可在 my.cnf/my.ini 中设置:
log_error = /var/log/mysql/error.log  # 自定义路径
log_error_verbosity = 3  # 日志详细级别(0-3,默认2)

2. 通用查询日志(General Query Log)

  • 作用:记录所有客户端连接、断开事件及执行的 SQL 语句(包括 SELECT)。
  • 启用
  • 永久启用:在配置文件中添加 general_log = ON
  • 临时启用(重启后失效):
SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = '/var/log/mysql/general.log';  # 自定义日志文件
  • 注意:生产环境中慎用,因会产生大量日志,影响性能。
  • 用途:审计 SQL 执行(如误操作追踪),开发/测试环境调试。

3. 慢查询日志(Slow Query Log)

  • 作用:记录执行时间超过阈值或未使用索引的查询,用于性能优化。
  • 启用
  • 配置参数:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log  # 日志路径
long_query_time = 1  # 慢查询阈值(秒,默认10秒,建议设为更严格的值)
log_queries_not_using_indexes = ON  # 记录未使用索引的查询(可选)
  • 生效需重启 MySQL 或通过 SET GLOBAL 临时设置(需 SUPER 权限)。

  • 分析工具

  • 用途:定位低效查询,优化索引或 SQL 语句。
  • 可视化工具:Percona Toolkit(pt-query-digest)、MySQL Workbench 等。
  • mysqldumpslow(命令行):
mysqldumpslow -s t -t 10 slow.log  # 按时间排序,取前10条最慢查询

4. 二进制日志(Binary Log,binlog)

  • 作用:记录所有修改数据的语句(INSERT/UPDATE/DELETE 等)及数据定义语句(CREATE/DROP 等),用于主从复制、数据恢复。
  • 启用
  • 配置文件中添加:
server_id = 1  # 主从复制必须配置
log_bin = /var/log/mysql/mysql-bin.log  # 日志前缀(自动生成编号文件)
binlog_format = ROW  # 日志格式:STATEMENT(默认)、ROW、MIXED
  • ROW 格式记录行级变化,安全性更高(避免函数不确定性问题),但日志体积较大。

  • 操作工具

  • 查看日志列表:SHOW BINARY LOGS;
  • 解析日志:mysqlbinlog /var/log/mysql/mysql-bin.000001
  • 清理日志:PURGE BINARY LOGS BEFORE '2025-05-13 00:00:00';(谨慎操作!)
  • 注意:生产环境必须启用,需定期备份并设置过期策略(expire_logs_days = 7)。

5. 中继日志(Relay Log)

  • 作用:主从复制中,从库用于存储主库发送的二进制日志事件,供 SQL 线程执行。
  • 启用:从库自动生成,路径通过 show variables like 'relay_log'; 查看。
  • 用途:保证主从数据同步的可靠性。

6. 审计日志(Audit Log,需插件)

  • 作用:记录所有用户操作(连接、查询、修改等),满足合规审计需求。
  • 启用
  • 用途:金融、医疗等对操作审计严格的场景。
  • MySQL 8.0+ 支持原生审计插件:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
SET GLOBAL audit_log_format = JSON;  # 日志格式
SET GLOBAL audit_log_file = '/var/log/mysql/audit.log';

二、日志配置与管理

1.查看日志状态

SHOW VARIABLES LIKE 'log_%';  # 查看所有日志相关参数
SHOW GLOBAL STATUS LIKE 'Slow_queries';  # 慢查询总数

2.日志轮换: - 自动轮换:通过 expire_logs_days(二进制日志)或系统工具(如 logrotate)。 - 手动轮换:FLUSH LOGS;(生成新日志文件)。

3.安全注意事项: - 二进制日志和审计日志包含敏感数据,需限制文件权限(建议 chmod 600)。 - 生产环境中禁用通用查询日志,避免性能损耗。

三、典型场景应用

  • 故障排查:优先查看错误日志,定位服务器崩溃、连接拒绝等问题。
  • 性能优化:分析慢查询日志,优化索引或重写 SQL。
  • 数据恢复:通过二进制日志回退到指定时间点(需配合备份)。
  • 主从复制:依赖二进制日志和中继日志实现数据同步。

通过合理配置和分析日志,可有效提升 MySQL 的稳定性、性能和安全性。根据业务需求选择启用的日志类型,并定期清理和备份关键日志(如二进制日志)。