一、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 的稳定性、性能和安全性。根据业务需求选择启用的日志类型,并定期清理和备份关键日志(如二进制日志)。