mysql安装完成后如何配置日志_mysql日志管理方法

来源:这里教程网 时间:2026-02-28 20:45:06 作者:

如何确认 MySQL 是否已启用错误日志和慢查询日志

安装完 MySQL 后,默认不一定开启所有日志,尤其慢查询日志(

slow_query_log
)通常默认关闭。错误日志(
error_log
)一般默认开启,但路径可能因安装方式而异(如 Homebrew、Docker、源码编译或官方 DMG/MSI 安装包路径不同)。

登录 MySQL 后执行以下命令确认当前状态:

SHOW VARIABLES LIKE 'log_error';<br>SHOW VARIABLES LIKE 'slow_query_log';<br>SHOW VARIABLES LIKE 'long_query_time';<br>SHOW VARIABLES LIKE 'slow_query_log_file';

常见问题:返回

log_error
值为空或为
stderr
,说明错误日志未落盘;
slow_query_log
值为
OFF
,即慢日志根本没开。

修改 my.cnf 启用并规范日志路径

MySQL 读取配置的优先级顺序是:/etc/my.cnf → /etc/mysql/my.cnf → /usr/etc/my.cnf → ~/.my.cnf。生产环境建议统一使用

/etc/my.cnf
/etc/mysql/my.cnf

[mysqld]
段下添加或修改以下配置项:

[mysqld]<br>log_error = /var/log/mysql/error.log<br>slow_query_log = ON<br>slow_query_log_file = /var/log/mysql/slow.log<br>long_query_time = 1.0<br>log_queries_not_using_indexes = OFF
log_error
必须指定绝对路径,且 MySQL 进程(通常是
mysql
用户)要有写权限;否则启动失败或静默丢弃日志
slow_query_log_file
路径需提前创建目录并赋权:
sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql
long_query_time
单位是秒,支持小数(如
0.5
),设为
0
表示记录所有查询(仅调试用,勿上生产)
log_queries_not_using_indexes
开启后会显著增加慢日志体积,建议仅在索引优化阶段临时启用

运行时动态开启慢查询日志(无需重启)

如果无法重启 MySQL(如云数据库 RDS 或线上服务),可用 SQL 动态开关慢日志:

SET GLOBAL slow_query_log = 'ON';<br>SET GLOBAL long_query_time = 2.0;

注意:

该设置只对新连接生效,已有连接不受影响 动态设置的
slow_query_log_file
值不会改变——它始终沿用配置文件中定义的路径(若未配置,则用默认名
host_name-slow.log
,位置在数据目录下)
动态关闭后,日志文件不会自动轮转或关闭句柄,需手动
FLUSH LOGS
才能确保写入完成

日志轮转与清理不能只靠 logrotate

MySQL 自身不管理日志文件大小和归档,

logrotate
直接重命名或压缩
error.log
slow.log
会导致 MySQL 继续往旧文件句柄写入(表现为磁盘空间不释放)。

正确做法是配合

FLUSH LOGS

# 先通知 MySQL 关闭当前日志文件并打开新文件<br>mysql -e "FLUSH LOGS;"<br># 再由 logrotate 处理旧文件(如压缩、删除)

典型

/etc/logrotate.d/mysql
配置片段:

/var/log/mysql/*.log {<br>    daily<br>    missingok<br>    rotate 30<br>    compress<br>    delaycompress<br>    notifempty<br>    create 640 mysql mysql<br>    sharedscripts<br>    postrotate<br>        if [ -f /var/run/mysqld/mysqld.pid ]; then<br>            mysql -e "FLUSH LOGS;" > /dev/null 2>&1<br>        fi<br>    endscript<br>}

最容易被忽略的是:没加

sharedscripts
postrotate
中的
FLUSH LOGS
,结果日志文件越滚越大,磁盘悄悄被打满。

相关推荐