Emi*_*mir 6 mysql sql chmod chown mysql-loadfile
我想让SQL LOAD_FILE函数工作,并阅读每一个问题/答案+关于此的文档,但这是正在发生的事情.
当我想从我的主目录LOAD_FILE:
mysql> SELECT LOAD_FILE('/home/myuser/somefile.txt');
+----------------------------+
| LOAD_FILE('/home/myuser/somefile.txt') |
+----------------------------+
| NULL |
+----------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
在得到这个之后,我想也许问题是MySQL无法访问我的主目录.我尝试运行它,这很好用:
SELECT LOAD_FILE('/etc/mysql/my.cnf');
Run Code Online (Sandbox Code Playgroud)
然后SELECT LOAD_FILE('/etc/passwd');工作得很好.
所以我说getcha,这是一个文件/文件夹读/所有权限问题.所以,我将我的文件移动到/ etc/mysql /但是它仍然无法正常工作.我已经尝试chown mysql:mysql somefile.txt但仍然没有运气:
mysql> SELECT LOAD_FILE('/etc/mysql/somefile.txt');
+----------------------------+
| LOAD_FILE('/etc/mysql/somefile.txt') |
+----------------------------+
| NULL |
+----------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
PS 1.所有用户组都可以读取所有文件,因此无需chmod.但是如果你想问的话,我甚至尝试过chmod 777. 2.我检查过,在MySQL中没有设置secure-file-priv变量,所以不,LOAD_FILE不限于任何路径.
任何想法可能是什么问题?
我发现它与AppArmor有关.我禁用了AppArmor for MySQL并且它有效.对于遇到同样问题的人,请在此处阅读:http://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/
根据文档
要使用此功能,该文件必须位于服务器主机上。
您必须指定文件的完整路径名。
您必须具有 FILE 权限。
该文件必须可供所有人读取
文件大小应小于
max_allowed_packet字节。如果 secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。
如果文件不存在或由于不满足上述条件之一而无法读取,则该函数返回 NULL。
因此检查是否满足上述所有条件。
编辑:
不知道你理解是否正确..
确保文件父目录有执行权限。所以如果somefile.txt位于myuser目录下;您必须对目录具有执行权限myuser。
You must have the FILE privilege.意味着必须使用显式授予 FILE 权限GRANT FILE on . TO user@localhost
刷新权限
注销并重新登录并检查它是否有效。
请参阅这篇文章MySQL LOAD_FILE() 加载空值