如何让MySQL以不同的用户身份写入外部文件?

如何让MySQL以不同的用户身份写入外部文件?,mysql,sql,into-outfile,Mysql,Sql,Into Outfile,我正在使用一个MySQL查询,它将数据写入outfile。我每一两天运行一次这个查询,因此我希望能够删除outfile,而不必求助于su或sudo。我能想到的实现这一点的唯一方法是将outfile编写为mysql用户以外的其他人所有。这可能吗 编辑:我不是将输出重定向到文件,而是使用select查询的INTO OUTFILE部分输出到文件 如果有帮助: mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_6

我正在使用一个MySQL查询,它将数据写入outfile。我每一两天运行一次这个查询,因此我希望能够删除outfile,而不必求助于su或sudo。我能想到的实现这一点的唯一方法是将outfile编写为mysql用户以外的其他人所有。这可能吗

编辑:我不是将输出重定向到文件,而是使用select查询的INTO OUTFILE部分输出到文件

如果有帮助: mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2 mysql——版本 mysql版本14.12发行版5.0.32,适用于使用readline 5.2的pc linux gnu(x86_64)

如果您让另一个用户从cron运行查询,它将以该用户的身份创建文件。

输出文件是由mysqld进程创建的,而不是由您的客户端进程创建的。因此,输出文件必须由mysqld进程的uid和gid拥有

如果从可以访问该文件的uid或gid下的进程访问该文件,则可以避免必须使用sudo来访问该文件。换句话说,如果mysqld创建uid和gid“mysql”/“mysql”所拥有的文件,那么将您自己的帐户添加到组“mysql”中。然后您应该能够访问该文件,前提是该文件的权限模式包括组访问

编辑:

您正在删除/tmp中的文件,目录权限模式为rwxrwt。粘性位('t')意味着只有当您的uid与文件的所有者相同时,才可以删除文件,而不考虑对文件或目录的权限

如果您将输出文件保存在另一个未设置粘性位的目录中,您应该能够正常删除该文件

阅读sticky(8)手册页的以下摘录:

粘性目录

设置了“粘性位”的目录将成为仅附加的目录,或者更准确地说,成为限制删除文件的目录。只有当用户具有目录的写入权限且用户是文件所有者、目录所有者或超级用户时,用户才能删除或重命名粘性目录中的文件。此功能可有效地应用于/tmp等目录,这些目录必须可公开写入,但应拒绝用户任意删除或重命名彼此的文件的许可。

不使用“选择…到输出文件”语法,否

您需要以另一个用户的身份运行查询(ie客户端),并重定向输出。例如,编辑crontab以随时运行以下命令:

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt
这将创建/tmp/outfile.txt作为您添加命令的crontab的用户。

我就是这么做的

sudo gedit /etc/apparmor.d/usr.sbin.mysqld

 /var/www/codeigniter/assets/download/* w,


就是这样,我可以轻松地
选择到OUTFILE
任何文件名

该文件位于“mysql”/“mysql”并修改了666。我已将自己添加到mysql组,但仍然无法删除它。文件所在目录的所有权和权限是什么?我想Bill的意思是,您必须拥有包含目录的写入权限才能在UNIX中删除文件(b/c它更新目录列表)。所以“chgrp mysql”这个dir和“chmod ug+rwX”让你的mysql组用户在dir上写perm。是的,这就是我的意思。我正在把文件写到/tmp。“drwxrwxrwt”根/根注意,与导出文件中的
相比,管道将产生不同的结果。例如,管道包括列名称作为第一行,NULL而不是\N等(在Ubuntu中。详细信息可能在其他操作系统中有所不同)
sudo service mysql restart