我正在使用写入outfile的MySQL查询.我每天或每两天运行一次这样的查询,所以我希望能够删除outfile而不必诉诸su或sudo.我能想到实现这一目标的唯一方法是将outfile编写为由mysql用户以外的其他人所拥有.这可能吗?
编辑:我没有将输出重定向到文件,我使用选择查询的INTO OUTFILE部分输出到文件.
如果它有帮助:
mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2
输出文件由mysqld进程创建,而不是由客户端进程创建.因此,输出文件必须由mysqld进程的uid和gid拥有.
如果您从可以访问该文件的uid或gid下的进程访问该文件,则可以避免使用sudo来访问该文件.换句话说,如果mysqld创建了由uid和gid"mysql"/"mysql"拥有的文件,那么将自己的帐户添加到"mysql"组中.然后,您应该能够访问该文件,前提是文件的权限模式包括组访问权限.
编辑:
您正在删除/ tmp中的文件,其目录权限模式为rwxrwxrwt.粘滞位('t')表示只有当您的uid与文件所有者相同时才能删除文件,无论文件或目录的权限如何.
如果将输出文件保存在另一个没有设置粘滞位的目录中,则应该能够正常删除该文件.
请阅读粘性手册(8)的摘录:
STICKY DIRECTORIES
设置了"粘滞位"的目录将成为仅附加目录,或者更准确地说,是限制文件删除的目录.如果用户具有该目录的写权限并且该用户是该文件的所有者,该目录的所有者或超级用户,则只有用户可以删除或重命名粘性目录中的文件.此功能非常适用于/ tmp等目录,这些目录必须是可公开写入的,但应拒绝用户任意删除或重命名彼此文件的许可.
没有使用"SELECT ... INTO OUTFILE"语法,没有.
您需要以另一个用户身份运行查询(即客户端),并重定向输出.例如,编辑crontab以在需要时运行以下命令:
mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt
这将创建/tmp/outfile.txt作为您已添加命令的crontab的用户.