我想让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)
所以在得到这个之后,我想也许问题是MySQL无法访问我的主目录。我尝试运行它,这很好用:
SELECT LOAD_FILE('/etc/mysql/my.cnf');
然后SELECT LOAD_FILE('/etc/passwd');
工作正常。
所以我说了问题,它是文件/文件夹读取/所有权许可问题。所以,我将我的文件移动到/ 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)
P.S。 1。所有用户组都可以读取所有文件,因此无需chmod。但是,如果您想问,我甚至尝试过 chmod 777 。 2. 我检查过,在MySQL中没有设置secure-file-priv变量,所以不,LOAD_FILE不限于任何路径。
任何想法可能会出现问题吗?
答案 0 :(得分:6)
我发现它与AppArmor有关。我禁用了AppArmor for MySQL并且它有效。 对于遇到相同问题的人,请在此处阅读:http://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/
答案 1 :(得分:3)
要使用此功能,该文件必须位于服务器主机上。
您必须指定文件的完整路径名。
您必须拥有FILE权限。
所有
文件必须是可读的文件大小应小于
max_allowed_packet
个字节。如果secure_file_priv系统变量设置为非空目录 name,要加载的文件必须位于该目录中。
如果文件不存在或因为其中一个而无法读取 不满足前面的条件,函数返回NULL 。
所以检查上述所有条件是否满足。
修改强>
不确定你是否理解正确..
确保文件父目录具有执行权限。如果somefile.txt
位于myuser
目录下;您必须具有myuser
目录的执行权。
You must have the FILE privilege.
表示必须使用GRANT FILE on . TO user@localhost
冲洗权限
退出并重新登录并检查它是否正常工作。
答案 2 :(得分:1)
在尝试将图像添加到blob字段时,我对Fedora Linux也存在同样的问题。
我解决了将文件复制到目录/var/lib/mysql/images
并给出命令:
chown -R mysql:mysql /var/lib/mysql/images
答案 3 :(得分:0)
加载数据infile file_name ...是MySQL的正确命令。由于您没有提供文件中数据的示例,因此无法向您显示确切使用它。有变量来处理分隔符和行尾特征。祝你好运。
答案 4 :(得分:0)
所以我一直在努力解决这个问题,终于找到了解决方案:
mysql> select LOAD_FILE('/var/www/upload/test.zip');
+---------------------------------------+
| LOAD_FILE('/var/www/upload/test.zip') |
+---------------------------------------+
| NULL |
+---------------------------------------+
1 row in set (0.00 sec)
问题是未设置 secure_file_priv 。要查看指向何处,请执行以下查询:
执行查询:
select @@GLOBAL.secure_file_priv;
指向要查找文件的区域 我所做的是将以下内容添加到mysqld.conf的最后
secure_file_priv = /var/www/upload.
重新启动mysql并进行测试
mysql> select LOAD_FILE('/var/www/upload/test.zip');
+--------------------------------------------------------------------------------------