2012-09-14 51 views
6

我使用加载数据插入查询时出现错误。MySQL:加载数据infl

"load data infile '/home/bharathi/out.txt' into table Summary" 

此文件位于该位置。但是mysql会抛出下面的错误。 ERROR 29(HY000):文件 '/home/bharathi/out.txt' 未找到(ERRCODE:13)

show variables like 'data%'; 
+---------------+-----------------+ 
| Variable_name | Value   | 
+---------------+-----------------+ 
| datadir  | /var/lib/mysql/ | 
+---------------+-----------------+ 

数据风向指向根权限的文件夹中。我不能改变这个变量,因为它是只读的。

我该怎么做load data infile操作?

我试着改变文件权限,加载数据本地infile。它不会工作。

+0

在哪个系统(服务器或客户端)是文件? – eggyal

+0

服务器和客户端或同一台机器。 – kannanrbk

回答

11

由于LOAD DATA INFILE Syntax下记载:

出于安全原因,当读取位于服务器上的文本文件时,该文件必须驻留在数据库目录或者是所有可读。此外,要在服务器文件上使用LOAD DATA INFILE,您必须具有FILE权限。见Section 6.2.1, “Privileges Provided by MySQL”。对于非LOCAL加载操作,如果secure_file_priv系统变量设置为非空目录名称,则要加载的文件必须位于该目录中。

因此,应该可以:

  • 确保你的MySQL用户具有FILE特权,并假设secure_file_priv系统变量未设置:

    • 使文件可读所有;或

    • 将文件移动到数据库目录中。

  • 否则,使用LOCAL关键字有文件由您的客户端读取并传输到服务器。但是,请注意:

    LOCAL仅适用于您的服务器和客户端都已配置为允许它的情况。例如,如果mysqld--local-infile=0开头,则LOCAL不起作用。请参阅Section 6.1.6, “Security Issues with LOAD DATA LOCAL

+0

以秒为单位打我...... +1 – fancyPants

8

这确实为我工作的解决方案是:

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv 

增加以备将来参考。