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

MySQL LOAD_FILE()加载空值

唐裕
2023-03-14

我试图将xml文件目录作为blob加载到数据库表中。每一行将包含一个对应的blob文件。当通过python脚本将文件加载到表中时,值被插入为null。在mysql命令行中运行等效命令时也是如此。

在将一些文件夹权限更改为mysql后,我一度能够插入值,但由于需要脚本权限,我不得不修改目录/var/lib/mysql/foo的所有权,因此值被重新插入为null,这实际上破坏了我编写的脚本。我记不起这样做需要更改目录权限。

以下是对该主题的讨论:

http://bugs.mysql.com/bug.php?id=38403

伴随着

MySQL加载文件返回NULL

共有3个答案

龙永思
2023-03-14

我因这个问题耽误了一些时间。在我的例子中,问题与“my.ini”中定义的secure_file_priv变量有关。

从MySQL留档:

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

所以,有两种方法:

1)删除此选项2)使用默认文件夹上传文件(C:\Program Data\MySQL\MySQL Server 5.7\Uploads)。我还必须在Windows中使用双斜杠。

齐英耀
2023-03-14

确保:

  • 在父目录上有执行权限
  • 必须明确授予FILE特权。(授予文件。user@localhost)
  • 你有冲走的特权
  • 您已注销并重新登录

父目录权限示例:


mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg`
drwxrwxr--. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/image

Test01.jpg'));
+-------------------------------------------------------------------------------------------------------------+
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) |
+-------------------------------------------------------------------------------------------------------------+
| NULL                                                                                                        |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)



mysql> \! chmod o+x /home/jlam/code/projectName/doc/filesForTesting/images
mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg`
drwxrwxr-x. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images
mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'));
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                                                                                                                
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

用户权限示例:


16:38:09 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal
Enter password: 

mysql> show grants;
+-----------------------------------------------------------------------------------------------------------------+
| Grants for eventCal@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'eventCal'@'localhost' IDENTIFIED BY PASSWORD '*xxxx' |
| GRANT ALL PRIVILEGES ON `tmp`.* TO 'eventCal'@'localhost'                                                       |
| GRANT ALL PRIVILEGES ON `eventCalTesting`.* TO 'eventCal'@'localhost'                                           |
| GRANT ALL PRIVILEGES ON `eventCal`.* TO 'eventCal'@'localhost'                                                  |
| GRANT ALL PRIVILEGES ON `eventCal_categoryMigration`.* TO 'eventCal'@'localhost'                                |
+-----------------------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'));
+-------------------------------------------------------------------------------------------------------------+
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) |
+-------------------------------------------------------------------------------------------------------------+
| NULL                                                                                                        |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

在其他根会话中:


mysql> grant file ON *.*  to eventCal@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在用户会话中,我仍然无法加载文件


mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'));
+-------------------------------------------------------------------------------------------------------------+
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) |
+-------------------------------------------------------------------------------------------------------------+
| NULL                                                                                                        |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

.....但如果我退出并重新登录:


mysql> exit
Bye

16:40:14 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal
Enter password: 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'));
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                                                                                                                
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

龚迪
2023-03-14

我将文件复制到了MySQL可以访问的位置
要知道我使用的位置:

select @@secure_file_priv;

它给了我/var/lib/mysql文件/

其他方法都不起作用:既不能关闭幽灵,也不能更改所有权和权限,也不能仅仅授予file特权。所以我回滚了大部分,但是正确的目录仍然有效。在我的情况下。

我的消息来源是Raymond Nijland,这里:https://dba.stackexchange.com/questions/190380/load-file-producing-null

 类似资料:
  • 我想让SQL LOAD_FILE函数正常工作,并且已经阅读了关于这个问题的每一个问答文档,但下面是正在发生的事情。 当我想从主目录加载_文件时: 所以在得到这个之后,我想问题可能是MySQL无法访问我的主目录。我试着运行这个,效果很好: 然后

  • 问题内容: 我正在尝试将xml文件的目录作为blob加载到数据库表中。每行将包含一个对应的Blob文件。通过python脚本将文件加载到表中时,值将插入为null。在mysql命令行中运行等效命令时,也是如此。 有一次,我可以在将一些文件夹权限更改为mysql后插入值,但是由于需要脚本权限,我不得不修改目录/ var / lib / mysql / foo的所有权,因此值被重新插入为null,有效

  • 我正在使用Apache PDFBox渲染PDF文档的缩略图。因此,我加载PDF并将第一页用作缩略图。问题是,对于特定的文档,似乎没有正确加载。对于所有其他文档,它的工作方式与预期一致。 <代码>ByteArrayInputStream is=新建ByteArrayInputStream(pdfData) PDDocument pdf=PDDocument。载荷(is,true) <代码>列表 pd

  • 问题内容: 我正在使用cdh5 quickstart vm,并且我有一个像这样的文件(此处不完整): 我使用了这个脚本: 该脚本有效,但是生成的文件为空,您有什么想法吗? 问题答案: 最后,只有此模式有效:如果我添加或删除与该配置不同的空格,那么我将出现错误(我还为元组添加了“名称”,并在其为空时指定了“ null”,并更改了作者之间的顺序和来源,但即使没有这种配置,它仍然是错误的) 工作脚本是这

  • 我试图在Spring boot类中使用@Autowired注释将存储库放入一个用@Service注释的类中。但是,存储库显示为空。 以下是相关代码: 此时它会得到一个NPE,因为licenceReposity为空。 我可以使用此构造函数访问控制器类中的licenseRepository 但是,由于我直接在静态main方法中调用构造函数,这似乎不可用。将存储库放入此类的最佳方法是什么? 编辑:感谢您

  • 我的应用程序部署在一个JBoss6服务器中,该服务器包含最新的BC实现bcprov-jdk15on-151.jar放在服务器安装的lib文件夹中。尝试运行以下代码段时: JBoss似乎没有成功地在tmp目录中打开JAR进行验证。我做了多个测试,例如:-在一个单独的主类中手动验证JAR-在tmp目录中创建一个文件并在JBoss应用程序代码中打开它-更改默认的tmp目录(java.io.tmpdir)