You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Homestead设置MySQL general_log_file到共享文件夹权限报错如何解决

问题根源

你遇到的OS errno 13 - Permission denied错误和secure_file_priv配置无关,给mysql用户授予root权限不仅解决不了问题,还会带来极大的安全隐患,必须先回滚该操作。
报错的核心原因有两个:

  • /home/vagrant/code是Vagrant挂载到虚拟机的Windows共享目录,默认挂载权限不允许mysql系统用户写入
  • Ubuntu系统默认启用的AppArmor强制访问控制模块,对mysqld进程的可读写路径做了白名单限制,共享目录不在默认白名单内,哪怕文件权限设为777也会被拦截。
解决步骤

1. 回滚mysql用户的root权限

在虚拟机终端执行以下命令,移除mysql用户的超额权限:

sudo deluser mysql sudo
sudo rm -f /etc/sudoers.d/mysql

2. 调整共享目录挂载参数

在你本地Windows的Homestead配置目录下,编辑Homestead.yaml文件,找到folders配置段,给code目录的挂载项补充权限参数:

folders:
    - map: 【替换为你本地Windows存放代码的实际路径】
      to: /home/vagrant/code
      options:
          dmode: 775
          fmode: 664
          uid: 111
          gid: 113

注:Homestead环境默认mysql用户的uid为111、mysql组的gid为113,你可以在虚拟机执行id mysql确认数值,如果和默认值不一致,替换为实际查询到的结果即可。

配置修改完成后,在本地Homestead目录执行命令重载虚拟机:

vagrant reload --provision

3. 修改AppArmor规则放开MySQL的路径权限

虚拟机重载完成后,ssh登录进虚拟机,执行以下操作:

  1. 编辑AppArmor的MySQL服务规则文件:
sudo vi /etc/apparmor.d/usr.sbin.mysqld
  1. 在文件的规则段中,添加两行共享目录的读写权限配置:
/home/vagrant/code/ rw,
/home/vagrant/code/mysql.log rw,
  1. 保存退出后,重载AppArmor规则让配置生效:
sudo systemctl reload apparmor

4. 验证日志功能

登录MySQL,重新执行日志开启命令:

SET GLOBAL general_log_file = '/home/vagrant/code/mysql.log';
SET GLOBAL general_log = 'ON';

执行后不会再报权限错误,你可以直接在Windows本地的代码共享目录中看到实时更新的mysql.log通用查询日志文件。


内容的提问来源于stack exchange,提问作者dgshahr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 08:33:20