MySQL LOAD_FILE返回NULL

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不限于任何路径.

任何想法可能是什么问题?

Emi*_*mir 6

我发现它与AppArmor有关.我禁用了AppArmor for MySQL并且它有效.对于遇到同样问题的人,请在此处阅读:http://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/


Rah*_*hul 5

根据文档

要使用此功能,该文件必须位于服务器主机上。

您必须指定文件的完整路径名。

您必须具有 FILE 权限。

该文件必须可供所有人读取

文件大小应小于max_allowed_packet字节。

如果 secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

如果文件不存在或由于不满足上述条件之一而无法读取,则该函数返回 NULL

因此检查是否满足上述所有条件。

编辑:

不知道你理解是否正确..

  1. 确保文件父目录有执行权限。所以如果somefile.txt位于myuser目录下;您必须对目录具有执行权限myuser

  2. You must have the FILE privilege.意味着必须使用显式授予 FILE 权限GRANT FILE on . TO user@localhost

  3. 刷新权限

  4. 注销并重新登录并检查它是否有效。

请参阅这篇文章MySQL LOAD_FILE() 加载空值