MySQL:加载数据infile

kan*_*rbk 6 mysql

使用加载数据插入查询时出错.

"load data infile '/home/bharathi/out.txt' into table Summary"
Run Code Online (Sandbox Code Playgroud)

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

show variables like 'data%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

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

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

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

egg*_*yal 11

如LOAD DATA INFILE语法下所述:

出于安全原因,在读取位于服务器上的文本文件时,文件必须驻留在数据库目录中或者所有人都可读.此外,要LOAD DATA INFILE在服务器文件上使用,您必须具有该FILE权限.请参见第6.2.1节"MySQL提供的权限".对于非LOCAL加载操作,如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中.

因此,您应该:

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

    • 让所有人都可读的文件; 要么

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

  • 或者,使用LOCAL关键字将客户端读取的文件传输到服务器.但请注意:

    LOCAL仅当您的服务器和客户端都已配置为允许它时才有效.例如,如果mysqld启动--local-infile=0,LOCAL则不起作用.请参见第6.1.6节"安全问题LOAD DATA LOCAL".


Gau*_*wal 8

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

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv
Run Code Online (Sandbox Code Playgroud)

添加它以供将来参考.