关于Mysql开启慢查询日志报错:13 - Permission denied的解决方案
今天在使用docker创建mysql容器并启用慢查询时,使用的下面的指令:
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=1234 \
-v /home/hl/mysql8/conf:/etc/mysql/conf.d \
-v /home/hl/mysql8/data:/var/lib/mysql \
-v /home/hl/mysql8/logs:/var/log/mysql \
mysql:8.0.19
我的my.cnf文件如下:
[mysqld]
# 开启慢查询日志
slow_query_log = on
# 慢查询日志路径
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 慢查询阈值(单位:秒,超过此值的 SQL 会被记录)
long_query_time = 0.001
# 记录未使用索引的查询(可选)
# log_queries_not_using_indexes = 1
在进入容器内查看慢查询日志是否开启时,发现一直是OFF:
这说明配置文件中的slow_query_log并未加载,且直接使用set global slow_query_log = 1,也是会报错:
[HY000][29] File '/ var/ log/ mysql/ mysql-slow. log' not found (OS errno 13 - Permission denied)
解决方案:
问题出在 慢查询日志文件的权限或目录不存在,导致 MySQL 无法创建或写入日志文件。
解决步骤如下:
在容器内执行以下命令(注意:是在容器的 bash 终端,不是 MySQL 终端):
# 确保日志目录存在
mkdir -p /var/log/mysql# 手动创建慢查询日志文件
touch /var/log/mysql/mysql-slow.log# 赋予 MySQL 进程权限(关键:容器内 MySQL 通常以 mysql 用户运行)
chown -R mysql:mysql /var/log/mysql
chmod -R 755 /var/log/mysql
2. 重新设置慢查询日志并开启
文件创建后,进入 MySQL 终端配置:
# 进入 MySQL 终端
mysql -u root -p
在 MySQL 终端执行:
-- 设置慢查询日志文件路径(如果需要修改)
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';-- 开启慢查询日志
SET GLOBAL slow_query_log = ON;-- 验证配置
SHOW VARIABLES LIKE 'slow_query_log'; -- 应显示 ON
SHOW VARIABLES LIKE 'slow_query_log_file'; -- 应显示正确路径
问题得到了解决,重启容器再次查看也是开启的,究其原因,是我在创建挂载文件时没有创建mysql-slow.log文件,导致容器无法挂载,且没有权限创建...