tub*_*035 5 mysql linux permissions
我有一个问题,试图使用SELECT INTO OUTFILE和使用除以外的目录/tmp.
我的Linux用户被命名datam,我的MySQL用户是lea,而MySQL运行为mysql.
当datam运行mysql -u lea database并尝试SELECT INTO OUTFILE使用路径时/home/datam/xfers/online/file.csv,我得到错误代码13,权限被拒绝.使用/tmp/file.csv作品,所以我相信它不是MySQL中的权限问题.
我已添加mysql到该论坛datam并已通过以下方式验证:
~$ sudo id mysql
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam)
Run Code Online (Sandbox Code Playgroud)
我/home/datam/递归设置为775.
如果我这样做sudo -u mysql /bin/bash,去/home/datam/xfers/online/,做touch file它写入一个文件.
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' |
+-----------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
这可能是由mysql用户权限引起的.
如上所述https://dba.stackexchange.com/questions/17029/cannot-output-mysql-data-to-file
要为自己提供FILE权限,请执行以下操作:
service mysql restart --skip-networking --skip-grant-tablesmysql <hit enter> UPDATE mysql.user SET File_priv = 'Y' WHERE user='lea' AND host='localhost';exitservice mysql restartlinux用户可以写一个文件.但apparmor可能会阻止mysql服务.
检查此文件:/etc/apparmor.d/usr.sbin.mysqld.
在那里添加项目文件夹:
/usr/sbin/mysqld {
[...]
/home/datam/xfers/online/ r,
/home/datam/xfers/online/* rw
[...]
}
Run Code Online (Sandbox Code Playgroud)
最后,做一个
sudo /etc/init.d/apparmor reload
Run Code Online (Sandbox Code Playgroud)
小智 5
在现代系统 mariaDB 和 mysql 上安装了 systemd 支持。除其他外,它在 /etc/systemd/system/mysql.service 中有此设置:
保护家=真
这就是阻止它写入 /home 的原因。
| 归档时间: |
|
| 查看次数: |
17651 次 |
| 最近记录: |