MySQL 日志主要分为错误日志、查询日志(General Log)、慢查询日志(Slow Query Log)和二进制日志(Binary Log),不同日志用途不同,开启方式也略有差异。配置前建议先确认 MySQL 版本(
SELECT VERSION();),部分参数在 8.0+ 有调整。
开启错误日志(error log)
错误日志默认已开启,记录启动、关闭、严重警告和错误信息。位置通常由
log_error参数指定,可通过以下命令查看:
查看当前路径:
SHOW VARIABLES LIKE 'log_error';
修改方法(需重启或动态设置,取决于版本):
在my.cnf(Linux)或
my.ini(Windows)的
[mysqld]段添加:
log_error = /var/log/mysql/error.logMySQL 8.0.14+ 支持动态修改(无需重启):
SET PERSIST log_error = '/var/log/mysql/error.log';
开启通用查询日志(general log)
记录所有执行的 SQL 语句(含 SELECT),适合调试但影响性能,不建议长期开启。
启用方式:
临时开启(会话级或全局,重启失效):SET GLOBAL general_log = ON;
SET GLOBAL log_output = 'FILE';(输出到文件)或
'TABLE'(写入
mysql.general_log表) 永久开启(需配置文件):
在
[mysqld]下添加:
general_log = ON
general_log_file = /var/log/mysql/general.log
开启慢查询日志(slow query log)
记录执行时间超过
long_query_time的 SQL,默认阈值为 10 秒,可调低用于优化排查。
配置步骤:
检查是否启用:SHOW VARIABLES LIKE 'slow_query_log';临时启用:
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;(设为 1 秒) 永久配置(推荐):
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = ON(可选,记录未走索引的查询)
开启二进制日志(binary log)
用于主从复制和基于时间点的数据恢复,生产环境通常必须开启。
配置要点:
必须设置server_id(唯一整数),否则无法启用:
server_id = 1启用并指定文件名前缀:
log_bin = /var/lib/mysql/mysql-bin可选限制大小与过期天数:
max_binlog_size = 100M
expire_logs_days = 7(MySQL 8.0+ 推荐用
binlog_expire_logs_seconds = 604800)
配置完成后务必重启 MySQL 服务(
systemctl restart mysqld)或确认动态生效。所有日志路径需确保 MySQL 进程有读写权限,且磁盘空间充足。不复杂但容易忽略。
