当前位置: 首页 > 知识库问答 >
问题:

MySQLLOAD_FILE返回NULL

傅英喆
2023-03-14

我想让SQL LOAD_FILE函数正常工作,并且已经阅读了关于这个问题的每一个问答文档,但下面是正在发生的事情。

当我想从主目录加载_文件时:

mysql> SELECT LOAD_FILE('/home/myuser/somefile.txt');
+----------------------------+
| LOAD_FILE('/home/myuser/somefile.txt') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

所以在得到这个之后,我想问题可能是MySQL无法访问我的主目录。我试着运行这个,效果很好:

SELECT LOAD_FILE('/etc/mysql/my.cnf');

然后选择LOAD_FILE('/etc/passwd') 也很好。

所以我说明白了,这是一个文件/文件夹读取/所有权权限问题。所以,我把我的文件移到了/etc/mysql/中,但它仍然不起作用。我尝试了chown mysql:mysql somefile。但是,我还是没有运气:

mysql> SELECT LOAD_FILE('/etc/mysql/somefile.txt');
+----------------------------+
| LOAD_FILE('/etc/mysql/somefile.txt') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

附言1。所有用户组都可以读取所有文件,因此无需使用chmod。但如果你愿意的话,我甚至试过chmod 777。2.我检查过了,MySQL中没有设置安全文件priv变量,所以不,LOAD_file不限于任何路径。

你知道这里有什么问题吗?


共有3个答案

云联
2023-03-14

所以我一直在努力解决这个问题,终于找到了解决办法:

mysql> select LOAD_FILE('/var/www/upload/test.zip');
+---------------------------------------+
| LOAD_FILE('/var/www/upload/test.zip') |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+
1 row in set (0.00 sec)

问题是没有设置安全文件。要查看指向的位置,请执行以下查询:

执行查询:

select @@GLOBAL.secure_file_priv;

指向你要拉文件的区域我所做的是在末尾添加以下内容mysqld.conf

secure_file_priv =  /var/www/upload.

重新启动mysql并用

mysql> select LOAD_FILE('/var/www/upload/test.zip');
+--------------------------------------------------------------------------------------
向嘉誉
2023-03-14

根据文件

要使用此函数,文件必须位于服务器主机上。

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

你必须有文件权限。

该文件必须是可读的所有

文件大小应小于max_allowed_packet字节。

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

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

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

编辑:

不确定你是否理解正确...

>

  • 确保文件父目录具有执行权限。因此,如果somefile.txt位于myuser目录下;则必须具有对myuser目录的执行权限。

    您必须具有FILE特权。表示必须使用GRANT FILE on显式授予FILE特权。user@localhost代码

    冲掉特权

    注销并重新登录,检查它是否正常工作。

    请参阅本文MySQL LOAD_FILE()加载空值

  • 蔺昊穹
    2023-03-14

    我发现它与AppArmor有关。我禁用了AppArmor的MySQL和它的工作。对于有同样问题的人,请阅读这里:http://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/

     类似资料:
    • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

    • 我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null

    • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

    • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

    • 加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur

    • 问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是