系统信息: 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是否记录了此失败的原因?如果是这样,在哪里?
本
答案 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_packet字节。如果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可执行位