我经常从mysql(实际上是mariaDB)数据库运行简单的报告:
MariaDB [acts]> SELECT resolution, title FROM acts ORDER BY resolution INTO OUTFILE '/tmp/acts-titles.txt';
最近我使用systemd版本218-2将数据库服务器升级到基于linux 3.19的系统,并且惊讶地发现输出文件没有像我怀疑的那样直接进入/ tmp目录,而是进入/ tmp中的私有systemd文件夹:
[root@www tmp]# pwd
/tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/tmp
[root@www tmp]# ls
acts-titles.txt
[root@www tmp]# ls -ld /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/
drwx------ 3 root root 60 Mar 23 04:32 /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/
虽然这不是悲剧,但是不方便,因为只有root用户可以访问此目录,因此要求mysql管理员也在系统上具有root访问权限,这不一定是你想要的.
任何人都可以解释为什么systemd正在抓取文件,有没有办法绕过这种行为?
解决方法:
如果在/lib/systemd/system/mariadb.service中编辑secure tmp选项,则可以更改此行为.
systemctl stop mariadb
当你将PrivateTmp更改为false时,编辑/lib/systemd/system/mariadb.service:
# Place temp files in a secure directory, not /tmp
PrivateTmp=false # default is true
最后:
systemctl daemon-reload
systemctl start mariadb
如评论中所述,更好的解决方案是不要在mariadb.service文件中进行更改,而是选择不同的目录,给予权限,以便运行mariadb的用户可以访问它并将OUTFILE指向该目录.
如果启用了PrivateTmp选项,这将确保服务将看到的/ tmp目录是私有的并与主机的system / tmp隔离.
一个好的观点,你可以找到here.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。