MySQL:加载数据infile

时间:2012-09-14 09:05:12

标签: mysql

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

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

该文件位于该位置。但是mysql会抛出以下错误。 错误29(HY000):找不到文件'/home/bharathi/out.txt'(错误代码:13)

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

Data Dir指向root权限文件夹。我无法更改此变量,因为它是只读的。

如何进行加载数据infile操作?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:8)

真正对我有用的解决方案是:

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

添加它以供将来参考。