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

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

我得到了以下错误:

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

如何解决这个错误?

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

我使用的是MySQL 5.6


当前回答

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

[mysqld]
secure-file-priv = ""

其他回答

MySQL使用这个系统变量来控制导入文件的位置

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

所以问题是如何改变系统变量,如secure_file_priv。

关闭mysqld Sudo mysqld_safe——secure_file_priv=""

现在你可能会看到:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

我用命令中的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';

这对我很管用。好运!

我正在Debian上的MySQL5.7.11上工作,为我工作的命令是:

mysql> SELECT @@global.secure_file_priv;

我在windows 10上遇到了这个问题。为了解决这个问题,我做了以下工作。

在windows搜索(左下角)中,我输入了“powershell”。 右键单击powershell并以管理员身份运行。 导航到服务器bin文件。(C:\Program Files\MySQL\MySQL Server 5.6\bin); 键入。/ mysqld “输入”

服务器按预期启动。