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

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

我得到了以下错误:

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

如何解决这个错误?

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

我使用的是MySQL 5.6


当前回答

这为我工作(有额外的问题,不能使用本地与我当前的MySQL版本在语句LOAD DATE INFILE…)

sudo /usr/local/mysql/support-files/mysql.server start --secure-file-priv='' --local-infile

上述方法适用于我的机器上的给定路径;你可能需要调整你的路线。

然后使用:

mysql -u root -p

重要的一点是,您应该在MySQL数据文件夹中有CSV。在我的机器中,它位于:/usr/local/mysql-8.0.18-macos10.14-x86_64/data

如果需要在数据文件夹中删除CSV,可以更改文件夹权限。

设置: macOS Catalina 10.15.5版本 MySQL 8.0.18版本

其他回答

如果文件是本地的,请在命令中使用local

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

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

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

你有两个选择:

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

这为我工作(有额外的问题,不能使用本地与我当前的MySQL版本在语句LOAD DATE INFILE…)

sudo /usr/local/mysql/support-files/mysql.server start --secure-file-priv='' --local-infile

上述方法适用于我的机器上的给定路径;你可能需要调整你的路线。

然后使用:

mysql -u root -p

重要的一点是,您应该在MySQL数据文件夹中有CSV。在我的机器中,它位于:/usr/local/mysql-8.0.18-macos10.14-x86_64/data

如果需要在数据文件夹中删除CSV,可以更改文件夹权限。

设置: macOS Catalina 10.15.5版本 MySQL 8.0.18版本

在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/

在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";