我有一个问题,试图使用SELECT INTO OUTFILE并使用/ tmp以外的目录.
我的Linux用户名为datam,我的MySQL用户是lea,MySQL运行为mysql.
当datam运行mysql -u lea数据库并尝试使用/home/datam/xfers/online/file.csv路径执行SELECT INTO OUTFILE时,我收到错误代码13,权限被拒绝.使用/tmp/file.csv是有效的,所以我相信它不是MySQL中的权限问题.
我已经将mysql添加到datam组并通过以下方式验证了这一点:
~$sudo id mysql
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam)
我有/ home / datam /递归设置为775.
如果我做sudo -u mysql / bin / bash并转到/ home / datam / xfers / online /并执行触摸文件则会写入文件.
我需要做什么才能让mysql从SELECT INTO OUTFILE写一个文件?
我认为这不是围绕这个主题的其他问题的重复,因为我已经查看了它们并遵循了所有指令(在所有目录上设置执行,直到我想要的那个,设置GRANT FILE ON等).
MySQL用户lea授予:
+-----------------------------------------------------------------------------------------------------------+
| Grants for lea@localhost |
+-----------------------------------------------------------------------------------------------------------+
| GRANT FILE ON *.* TO 'lea'@'localhost' IDENTIFIED BY PASSWORD '*9BB439A3A652A9DAD3718215F77A7AA06108A267' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'lea'@'localhost' |
+-----------------------------------------------------------------------------------------------------------+
解决方法:
这可能是由mysql用户权限引起的.
要为自己提供FILE权限,请执行以下操作:
> service mysql restart –skip-networking –skip-grant-tables
> mysql< hit enter>
> UPDATE mysql.user SET File_priv =’Y’WHERE user =’lea’AND host =’localhost’;
>退出
>服务mysql重启
linux用户可以写一个文件.但apparmor可能会阻止mysql服务.
检查此文件:/etc/apparmor.d/usr.sbin.mysqld.
在那里添加项目文件夹:
/usr/sbin/mysqld {
[...]
/home/datam/xfers/online/ r,
/home/datam/xfers/online/* rw
[...]
}
最后,做一个
sudo /etc/init.d/apparmor reload
标签:mysql,linux,permissions
来源: https://codeday.me/bug/20190528/1170429.html