MySQL开启慢查询日志时报Errcode: 13 的解决方法

开启慢查询日志时会出现(Errcode: 13 - Permission denied)文件找不到的错误,但文件明明是存在的并且有读写的权限。

mysql> set global slow_query_log_file="/home/data/log/mysql/sql_log/mysql-slow.log";
mysql> set global slow_query_log=on;                                         

ERROR 29 (HY000): File '/home/data/log/mysql/sql_log/mysql-slow.log' not found (Errcode: 13 - Permission denied)

后来将文件路径改在了/var/log/mysql/slow_query.log下,设置权限后就成功了

mysql> set global slow_query_log_file="/var/log/mysql/slow_query.log";
Query OK, 0 rows affected (0.01 sec)

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'slow%';
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_launch_time    | 2                             |
| slow_query_log      | ON                            |
| slow_query_log_file | /var/log/mysql/slow_query.log |
+---------------------+-------------------------------+
3 rows in set (0.00 sec)
### 解决方案概述 MySQL 报错 `Errcode: 13 - Permission denied` 是由于权限不足导致的,通常发生在尝试读取或写入某些目录或文件时。以下是针对该问题的具体分析和解决方案。 --- #### **确认错误场景** 根据描述,错误可能出现在以下几个方面: - MySQL 容器无法访问 `/etc/mysql/conf.d/` 目录。 - 数据目录 (`datadir`) 或其他相关路径的权限不正确。 - 文件系统的安全模块(如 AppArmor 或 SELinux)限制了 MySQL 对某些文件的访问[^5]。 --- #### **具体解决方法** ##### 方法一:调整容器内的目录权限 如果使用 Docker 部署 MySQL,则需要确保宿主机上的挂载目录具有正确的权限。执行以下命令来更改目录所有权: ```bash sudo chown -R mysql:mysql /path/to/host/mounted/directory ``` 其中,`/path/to/host/mounted/directory` 是你在运行容器时通过 `-v` 参数映射到容器内部的路径。例如,如果你将宿主机的 `/data/mysql` 映射到了容器中的 `/var/lib/mysql`,则应修改 `/data/mysql` 的权限[^4]。 --- ##### 方法二:检查并修复配置文件路径 当 MySQL 尝试加载 `/etc/mysql/conf.d/` 下的配置文件时发生权限拒绝,可以采取以下措施: 1. 确认 `/etc/mysql/conf.d/` 是否存在以及是否有内容。 2. 修改其权限以允许 MySQL 用户访问: ```bash sudo chmod 755 /etc/mysql/conf.d/ sudo chown -R root:root /etc/mysql/conf.d/ ``` 注意:虽然推荐将此目录归属于 `root` 用户,但也需确保 MySQL 能够正常读取它[^1]。 --- ##### 方法三:处理数据目录权限 对于本地安装而非 Docker 场景下的 MySQL 实例,验证数据存储位置是否设置了适当的安全属性。操作如下: 1. 查找默认的数据目录位置,在 my.cnf 中定位 datadir 设置项; ```ini [mysqld] datadir=/var/lib/mysql ``` 2. 应用合适的权限设定至上述指定区域: ```bash sudo chmod 700 /var/lib/mysql sudo chown -R mysql:mysql /var/lib/mysql sudo chgrp -R mysql /var/lib/mysql ``` 完成这些步骤后再重新启动服务以便生效变化[^4]: ```bash sudo systemctl restart mysqld ``` --- ##### 方法四:排查操作系统级防护干扰 有时即使手动修正了所有可见层面的许可状况仍无济于事,这可能是由 Linux 上启用的应用程序装甲(AppArmor)或者强制访问控制(MAC)框架SELinux引起的问题。可以通过临时禁用来测试效果: 关闭AppArmor: ```bash sudo aa-disable /usr/sbin/mysqld ``` 停用SELinux模式切换成permissive状态而不完全卸载掉功能: ```bash setenforce 0 ``` 假如以上任一步骤解决了原初遇到的情况,那么就需要进一步定制化规则而不是简单粗暴地移除保护层[^5]. --- ### 总结 综上所述,面对 MySQL 出现 Errcode 13 错误的时候可以从多个角度切入寻找根源所在,并依据实际情况选用恰当的办法予以应对。无论是调整外部共享资源还是深入探究内核策略都不可或缺。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值