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
相关产品推荐
相关产品推荐

