12

我正在使用写入输出文件的 MySQL 查询。我每隔一两天运行一次此查询,因此我希望能够删除输出文件,而不必求助于 su 或 sudo。我能想到的唯一方法是让输出文件由 mysql 用户以外的人拥有。这可能吗?

编辑:我没有将输出重定向到文件,我正在使用选择查询的 INTO OUTFILE 部分输出到文件。

如果有帮助:

mysql --版本
mysql Ver 14.12 Distrib 5.0.32,适用于使用 readline 5.2 的 pc-linux-gnu (x86_64)

4

4 回答 4

12

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

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

编辑:

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

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

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

粘性目录

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

于 2008-10-23T23:55:35.787 回答
6

不使用“SELECT...INTO OUTFILE”语法,不。

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

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt

这将创建 /tmp/outfile.txt 作为您已将命令添加到的 crontab 用户。

于 2008-10-24T02:03:42.127 回答
1

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

于 2008-10-23T22:54:18.000 回答
1

我只是做

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

并添加

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

sudo service mysql restart

就是这样,我可以轻松地做SELECT INTO OUTFILE任何文件名

于 2010-06-12T11:58:11.150 回答