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

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

我得到了以下错误:

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

如何解决这个错误?

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

我使用的是MySQL 5.6


当前回答

我将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

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

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

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

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

它正在按预期工作。你的MySQL服务器已经启动了——secure-file-priv选项,该选项限制你可以使用load DATA INFILE从哪个目录加载文件。

使用SHOW VARIABLES LIKE "secure_file_priv";查看已配置的目录。

你有两个选择:

将文件移动到secure-file-priv指定的目录。 禁用secure-file-priv。必须从启动时删除,并且不能动态修改。要做到这一点,请检查MySQL启动参数(取决于平台)和my.ini。

无需更改任何配置文件..

使用@vhu发布的命令查找secure_file_priv的值:SHOW VARIABLES LIKE "secure_file_priv" 定义查询的完整路径,例如:select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE'…剩下的问题

这适用于我的mysql-shell在ubuntu 18.04 LTS mysql 5.7.29

在Ubuntu 14和Mysql 5.5.53上,这个设置默认是启用的。要禁用它,你需要在mysqld配置组下的my.cnf文件中添加secure-file-priv = ""。如:-

[mysqld]
secure-file-priv = ""