我正在学习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
当前回答
如果文件是本地的,请在命令中使用local
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
其他回答
@vhu我做了SHOW变量像“secure_file_priv”;它返回C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\所以当我插入它时,它仍然不工作。
当我直接打开my.ini文件时,我发现路径的格式有点不同:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
当我用它运行时,它工作了。唯一不同的是斜线的方向。
如果你在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';
这对我很管用。好运!
对于运行MySQL 5.6.23的MacOS Mojave,我在写文件时遇到了这个问题,但没有加载它们。(以前版本的Mac OS没有)。由于这个问题的大多数答案都是针对其他系统的,我想我应该发布my.cnf文件来解决这个问题(以及一个套接字问题),以防它对其他Mac用户有帮助。这是/etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
secure-file-priv = ""
skip-external-locking
(国际化与问题无关。)
没有其他要求。只需要关闭MySQL服务器,然后在首选项中再次打开(我们说的是Mac)。
这为我工作(有额外的问题,不能使用本地与我当前的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版本
对于mysql 8.0版本,你可以这样做:
mysql.server stop
mysql.server start --secure-file-priv=''
这招在Mac High Sierra很管用。