使用加载数据插入查询时出现错误。
"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数据。它不会工作。
答案 0 :(得分:11)
出于安全考虑,在读取位于服务器上的文本文件时,这些文件必须驻留在数据库目录中,或者所有文件都可以读取。此外,要在服务器文件上使用
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 withLOAD DATA LOCAL
”。
答案 1 :(得分:8)
真正对我有用的解决方案是:
sudo chown mysql:mysql /path/to/the/file/to/be/read.csv
添加它以供将来参考。