我正在学习MySQL,并尝试使用LOAD DATA子句。当我使用它时,如下所示:

LOAD DATA INFILE "text.txt" INTO table mytable;

我得到了以下错误:

MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句

如何解决这个错误?

我已经检查了关于相同错误信息的另一个问题,但仍然找不到解决方案。

我使用的是MySQL 5.6


当前回答

我用命令中的LOCAL选项解决了这个问题:

LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;

你可以在这里找到更多信息。

上的客户端程序读取文件 客户端主机和发送到服务器。该文件可以作为一个完整的 路径名称,以指定其确切位置。如果给出一个相对路径 名称时,名称将相对于所在的目录进行解释 客户端程序启动。

其他回答

我用命令中的LOCAL选项解决了这个问题:

LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;

你可以在这里找到更多信息。

上的客户端程序读取文件 客户端主机和发送到服务器。该文件可以作为一个完整的 路径名称,以指定其确切位置。如果给出一个相对路径 名称时,名称将相对于所在的目录进行解释 客户端程序启动。

如果你在Ubuntu上运行,你可能还需要配置Apparmor以允许MySQL写入到你的文件夹,例如,以下是我的配置:

将这一行添加到文件/etc/ apparor .d/usr.sbin中。mysqld:

/var/lib/mysql-files/* rw

然后在/etc/mysql/my.cnf部分添加以下两行配置:

[client]
loose-local-infile = 1

[mysqld]
secure-file-priv = ""

下面是我的SQL语句:

select id from blahs into outfile '/var/lib/mysql-files/blahs';

这对我很管用。好运!

下面是我在Windows 7中禁用secure-file-priv的方法(vhu回答的选项#2):

进入services.msc停止MySQL服务器服务。 转到C:\ProgramData\MySQL\MySQL Server 5.6 (ProgramData在我的例子中是一个隐藏文件夹)。 在记事本中打开my.ini文件。 搜索“secure-file-priv”。 通过在行首添加'#'来注释该行。对于MySQL Server 5.7.16及以上版本,注释将不起作用。你必须将它设置为一个空字符串,就像这样- secure-file-priv="" 保存文件。 进入services.msc启动MySQL服务器服务。

我将LOCAL添加到命令中,但它产生了另一个问题:

Loading local data is disabled - this must be enabled on both the client and server sides

为了解决这个问题,我在这里简单地执行了三个步骤

@vhu我做了SHOW变量像“secure_file_priv”;它返回C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\所以当我插入它时,它仍然不工作。

当我直接打开my.ini文件时,我发现路径的格式有点不同:

C:/ProgramData/MySQL/MySQL Server 8.0/Uploads

当我用它运行时,它工作了。唯一不同的是斜线的方向。