我正在学习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
当前回答
如果你在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';
这对我很管用。好运!
其他回答
我在这方面遇到了各种各样的问题。我在修改my。cnf和其他版本试图显示的各种疯狂的东西。
对我有用的是:
我得到的错误
MySQL服务器正在使用——secure-file-priv选项运行,所以它不能执行这条语句
我可以通过打开/usr/local/mysql/support-files/mysql来修复它。服务器,更改如下行:
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
to
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
对我有用的是:
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;
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 | |
+------------------+-------+
在这篇文章发表时,这个帖子已经被浏览了570k次。说实话,MySQL什么时候变成了我们过度保护的无理妈妈了?这是多么耗费时间的安全尝试——这实际上只会束缚我们!
经过多次搜索和尝试,一切都失败了。 我的解决方案:
对我有用的是:
导入。csv文件通过PhpMyAdmin导入旧的盒子(如果大做在cmd行) 生成一个.sql文件。 下载。sql文件。 通过MySQL Workbench导入.sql文件。
@vhu我做了SHOW变量像“secure_file_priv”;它返回C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\所以当我插入它时,它仍然不工作。
当我直接打开my.ini文件时,我发现路径的格式有点不同:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
当我用它运行时,它工作了。唯一不同的是斜线的方向。