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

Ubuntu下MySQL 8执行INTO OUTFILE遇权限拒绝问题求助

解决MySQL 8 INTO OUTFILE权限拒绝问题(Ubuntu)

针对你遇到的Error Code 1: Can't write to file '/data/mysql/uploads_mw_ebp/teste.txt' (OS errno 13 - Permission denied)报错,即使已设置目录777权限、mysql用户拥有FILE权限且目录在secure-file-priv范围内,仍有以下几个可能的原因及修复方案:

1. AppArmor 权限限制(Ubuntu默认启用)

Ubuntu默认通过AppArmor管控进程的文件访问权限,即便目录权限全开,AppArmor的MySQL规则也可能禁止写入该目录:

  • 查看MySQL的AppArmor配置文件:cat /etc/apparmor.d/usr.sbin.mysqld
  • 在配置中找到类似/var/lib/mysql/ r,的规则段,添加目标目录的读写权限:
    /data/mysql/uploads_mw_ebp/ rw,
    /data/mysql/uploads_mw_ebp/* rw,
    
  • 重新加载AppArmor规则并重启MySQL:
    sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
    sudo systemctl restart mysql
    

2. 上级目录权限不足

目标目录权限为777,但上级目录(如/data/mysql/)需要至少具备执行权限(x),才能让mysql用户进入子目录:

  • 检查上级目录权限:ls -ld /data/mysql/
  • 给上级目录添加其他用户的执行权限:
    sudo chmod o+x /data/mysql/
    

3. 目标文件已存在

INTO OUTFILE无法覆盖已存在的文件,需确保目标文件(注意报错中文件名是teste.txt,检查是否和语句中的test.txt存在拼写差异)不存在:

  • 删除已存在的文件:
    sudo rm /data/mysql/uploads_mw_ebp/teste.txt
    
  • 或修改SQL语句中的文件名,使用全新名称。

4. 确认MySQL进程运行用户

需确保MySQL确实以mysql用户身份运行,否则给mysql用户设置的权限无效:

  • 查看MySQL进程所属用户:ps aux | grep mysql
  • 若进程用户不是mysql,检查/etc/mysql/mysql.conf.d/mysqld.cnf中的user参数,设置为mysql后重启服务。

5. 挂载分区的权限限制

如果/data是外部挂载分区(如NFS、USB存储),挂载参数可能限制了写入权限:

  • 查看挂载信息:mount | grep /data
  • 若存在noexec、ro等限制参数,修改/etc/fstab中的挂载选项,添加rw、exec后重新挂载:
    sudo mount -o remount,rw /data
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:02:36