我在尝试使用SELECT INTO OUTFILE
并使用/tmp
以外的目录时遇到问题。
我的Linux用户名为datam
,我的MySQL用户为lea
,MySQL运行为mysql
。
当datam
运行mysql -u lea database
并尝试使用路径为SELECT INTO OUTFILE
的{{1}}时,我会收到错误代码13,权限被拒绝。使用/home/datam/xfers/online/file.csv
有效,所以我相信它不是MySQL中的权限问题。
我已将/tmp/file.csv
添加到mysql
群组,并已通过以下方式验证:
datam
我将~$ sudo id mysql
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam)
递归设置为775。
如果我执行/home/datam/
并转到sudo -u mysql /bin/bash
并执行/home/datam/xfers/online/
则会写入文件。
我需要做些什么才能让touch file
从mysql
写一个文件?
我认为这不是围绕这个主题的其他问题的重复,因为我看了他们并遵循他们的所有指示(在所有目录上设置执行导致我想要的,设置GRANT FILE ON等等)。
MySQL用户SELECT INTO OUTFILE
授予:
lea
答案 0 :(得分:5)
这可能是由mysql用户权限引起的。
如此处所述https://dba.stackexchange.com/questions/17029/cannot-output-mysql-data-to-file
要为自己提供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';
exit
service mysql restart
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
答案 1 :(得分:1)
在现代系统上,mariaDB&amp;使用systemd支持安装mysql。除其他外,它在/etc/systemd/system/mysql.service中有这个设置:
ProtectHome =真
这就是阻止它写入/ home的原因。
答案 2 :(得分:0)
我发现将目录的所有者更改为与mysql守护程序相同的用户对我有用。