MySQL 的日志文件存放在哪里?
MySQL 日志位置由版本、安装方式和输出配置决定;错误日志常见 /var/log/mysql/,启用 FILE 输出的慢/通用日志相对路径以实际数据目录为基准。本文给出定位与配置方法。
快速定位:通过包管理器(APT/Yum)安装的 MySQL,错误日志通常在 /var/log/ 或 /var/log/mysql/ 下,名字类似 error.log、mysqld.log;慢查询、通用查询日志需同时启用并选择 FILE 输出,相对路径以实际数据目录(常见 /var/lib/mysql/)为基准。最准确的定位方式是查配置或问数据库本身。
用 SQL 直接问 MySQL
SHOW VARIABLES LIKE 'log_error'; -- 错误日志路径
SHOW VARIABLES LIKE 'slow_query_log_file'; -- 慢查询日志路径
SHOW VARIABLES LIKE 'general_log_file'; -- 通用查询日志路径
SHOW VARIABLES LIKE 'datadir'; -- 数据目录
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'general_log';
SHOW VARIABLES LIKE 'log_output';
SHOW VARIABLES LIKE 'log_error_services'; -- 支持该变量的版本核对错误日志组件
文件名变量有值不表示日志已启用或正在写文件;慢/通用日志还需核对开关及 log_output 的 FILE/TABLE/NONE。错误日志有独立组件与输出配置。发行版、容器、自定义安装的默认值各不相同。
常见默认位置
| 系统/安装方式 | 典型位置 |
|---|---|
| Ubuntu/Debian(APT) | /var/log/mysql/error.log |
| CentOS/RHEL(Yum) | /var/log/mysqld.log |
| 未指定路径的慢日志等 | 数据目录(常为 /var/lib/mysql/) |
| Docker 官方镜像 | 容器内 /var/log/mysql/ 或直出 stderr |
配置文件在哪改
Debian 系通常在 /etc/mysql/mysql.conf.d/mysqld.cnf,RHEL 系在 /etc/my.cnf 或 /etc/my.cnf.d/:
[mysqld]
log_error = /var/log/mysql/error.log
slow_query_log = 1
log_output = FILE
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
改完需要重启 MySQL 生效(部分参数支持 SET GLOBAL 动态修改)。
确定文件位置后,若要集中保留故障记录,可用观测云 日志采集器读取错误日志或慢查询日志。两类日志分别设置来源及解析规则,用新产生的样本检查时间、级别和 SQL 耗时;注意慢日志中的 SQL 可能包含敏感业务值。
常见问题(FAQ)
Q:为什么 /var/log/mysql/ 是空的?
A:可能日志被配置到了数据目录,或实例用 systemd 把输出导进了 journal(journalctl -u mysql 查看)。
Q:通用查询日志能长期开吗?
A:不建议。它记录所有 SQL,繁忙库上量极大,只应短期排查时开启。
Q:慢查询日志里的时间阈值怎么调?
A:支持的版本可 SET GLOBAL long_query_time = 0.5,作为新连接的默认值;当前会话需 SET SESSION。动态修改是否持久化要另行配置,具体按版本核对。