我正在学习MySQL,并尝试使用LOAD DATA子句。当我使用它时,如下所示:
LOAD DATA INFILE "text.txt" INTO table mytable;
我得到了以下错误:
MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句
如何解决这个错误?
我已经检查了关于相同错误信息的另一个问题,但仍然找不到解决方案。
我使用的是MySQL 5.6
我正在学习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版本
其他回答
下面是我在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服务器服务。
如果你在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';
这对我很管用。好运!
我在这里遇到了同样的问题,ERRORCODE 2。是的,大部分答案都有意义,但我尝试了最简单的方法:
我在文件路径中使用了双斜杠。
我的示例路径与整个查询>>尝试它,请让每个人都知道它是否为你工作。
LOAD DATA LOCAL INFILE "E:\Irfan OneDrive \OneDrive - Qtech\Documents\Suppliers\HB\Extended\HotelTransferZone.csv" INTO TABLE temp_hb_transfer 以'|'结尾的字段 可选包含' ' ' 以“\n”结尾的行
在Ubuntu 14和Mysql 5.5.53上,这个设置默认是启用的。要禁用它,你需要在mysqld配置组下的my.cnf文件中添加secure-file-priv = ""。如:-
[mysqld]
secure-file-priv = ""
我在“secure-file-priv”上也遇到了同样的问题。在.ini文件中注释不起作用,在'secure-file-priv'指定的目录中移动文件也不起作用。
最后,正如dbc建议的那样,使'secure-file-priv'等于一个空字符串就可以工作了。所以如果有人在尝试了上面的答案后被困住了,希望这样做会有所帮助。