load_file在Mariadb中返回NULL而没有错误。记录此故障的原因在哪里?

时间:2017-08-28 09:50:19

标签: mariadb

系统信息: Linux Fedora 26 Mariadb版本10.1.25

我执行了MariaDB Insert BLOB Image中描述的所有陈述。 另外我还禁用了selinux。

但是load_file仍然返回NULL而不会出错。 我按照这些说明(https://mariadb.com/kb/en/the-mariadb-library/general-query-log/)启用了常规日志记录,但'queries.log'仅报告查询已执行,但未提供有关其返回NULL而不是所需输出的信息。

Mariadb是否记录了此失败的原因?如果是这样,在哪里?

4 个答案:

答案 0 :(得分:0)

Test.txt是一个简单的文本文件('This is a test')

select load_file('/home/bengbers/PMU/Test.txt');
+---------------------------------------------------------------------+
| load_file('/home/bengbers/PMU/Test.txt') |
+---------------------------------------------------------------------+
| NULL                                                                |
+---------------------------------------------------------------------+
1 row in set (0.11 sec)

SHOW VARIABLES LIKE 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+    
| sql_mode      | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.07 sec

答案 1 :(得分:0)

验证其余约束:

  

LOAD_FILE(FILE_NAME)

     

读取文件并以字符串形式返回文件内容。要使用此功能,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须具有FILE权限。该文件必须可由所有人读取,其大小必须小于max_allowed_pa​​cket字节。如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

     

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

     

character_set_filesystem系统变量控制以文字字符串形式给出的文件名的解释。

答案 2 :(得分:0)

以root身份

MariaDB [PMU]> \! ls -al Test.txt;
-rwxrwxrwx. 1 bengbers bengbers 16 11 jul 14:51 Test.txt

MariaDB [PMU]> \! ls -ld `dirname ..`;
drwxrwxr-x. 5 bengbers bengbers 4096 22 aug 14:35 .

MariaDB [PMU]> show grants;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '<password>' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                          |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [PMU]> select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

作为用户PMU

MariaDB [PMU]> show grants;
+-----------------------------------------------------------------------------------------------------------+
| Grants for PMU@localhost                                                                                                                  |
+-----------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'PMU'@'localhost' IDENTIFIED BY PASSWORD '<password' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `PMU`.* TO 'PMU'@'localhost'                                                                      |
    +-------------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)

AFAIK对load_file()的所有要求都已满了。

答案 3 :(得分:0)

您需要路径中的所有目录都具有SET可执行位