在本地mySQL (在CentOS 6 VM上)数据库上,我希望将一些数据从DB导出到如下文件:
SELECT html
FROM mytable
WHERE lang = 'en' and id='KEY01'
INTO OUTFILE 'key01_en.html'通过这样做,文件将被保存在/var/lib/mysql/mydbschema/默认情况下。
现在,我希望将该文件保存在我的用户(例如/home/userone/dump_html文件夹)中。
如果我这样说(我从shell中启动mysql命令,并作为“userone”记录):
SELECT html
FROM mytable
WHERE lang = 'en' and id='KEY01'
INTO OUTFILE '/home/userone/dumphtml/key01_en.html'它造成一个错误,即该进程没有足够的权限在其中写入。
但是现在仍然是从mysql>提示符,如果我做:
SELECT html
FROM mytable
WHERE lang = 'en' and id='KEY01'
INTO OUTFILE '/tmp/key01_en.html'
;
-- and then
system mv /tmp/key01_en.html /home/userone/dumphtml/key01_en.html
;它的工作没有任何问题。
在我看来,奇怪的是,SQL不能在我的磁盘上写入,但是system命令可以。知道为什么吗?(从SO上的这个答案开始对这一点的讨论)
发布于 2014-12-07 22:15:29
您的问题是,如果不使用默认的rpm或其他安装包,MySQL就不能写入主目录,因为默认情况下它将作为MySQL用户运行,或者在安装和配置时作为您定义的其他用户运行。默认情况下,用户无法写入另一个用户的主目录,因为它是每个帐户的私有空间。
默认情况下,所有用户都可以写/tmp。因此,MySQL可以在那里写作。根据系统上的用户组和umask,您可能可以以用户身份读取该输出。
如果您不想使用/tmp,您可以创建另一个目录,您的用户和MySQL可以在其中编写并确保您的用户和MySQL是同一个组的成员。
https://dba.stackexchange.com/questions/64809
复制相似问题