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

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

我得到了以下错误:

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

如何解决这个错误?

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

我使用的是MySQL 5.6


当前回答

在ubuntu 20.04中: 执行如下命令在系统中找到my.cnf:

commandlocate my.cnf

现在:编辑这个文件

sudo vim /etc/mysql/my.cnf

最后增加如下一行:

[mysqld]
secure-file-priv = ""

现在您可以导入文件,此错误将被删除。 或者你可以使用Mysql工作台文件导入: 链接:https://blog.skyvia.com/how-to-import-csv-file-into-mysql-table-in-4-different-ways/

其他回答

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

mysql> SELECT @@global.secure_file_priv;

我在“secure-file-priv”上也遇到了同样的问题。在.ini文件中注释不起作用,在'secure-file-priv'指定的目录中移动文件也不起作用。

最后,正如dbc建议的那样,使'secure-file-priv'等于一个空字符串就可以工作了。所以如果有人在尝试了上面的答案后被困住了,希望这样做会有所帮助。

在Linux中,你必须编辑my.cnf文件

/etc/mysql/my.cnf

修改26行号参数,如下所示:

secure-file-priv= <your data path directory like /home/user/data>

然后重新启动MySQL并重试。

在码头工人 你必须在docker-compose或手动添加命令中将my.cnf文件与my.cnf文件挂载到容器中:

volumes:
  - ./persistent:/var/lib/mysql
  - ./conf/my.cnf:/etc/mysql/my.cnf

接下来,在你的主机中修改/conf/my.cnf,并像上面的方法一样配置secure-file-priv参数,此外,你必须在mysql容器中挂载你的数据,并为secure-file-priv参数设置路径,重新启动你的服务,最后,你可以加载你的数据。

你可以用这个命令检查你的配置:

SHOW VARIABLES LIKE "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 |       |
+------------------+-------+

对我有用的是:

Put your file inside of the folder specified in secure-file-priv. To find that type: mysql> show variables like "secure_file_priv"; Check if you have local_infile = 1. Do that typing: mysql> show variables like "local_infile"; If you get: +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | OFF | +---------------+-------+ Then set it to one typing: mysql> set global local_infile = 1; Specify the full path for your file. In my case: mysql> load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.txt" into table test;