我正在学习MySQL并尝试使用LOAD DATA
子句。当我使用它如下:
LOAD DATA INFILE "text.txt" INTO table mytable;
我收到以下错误:
MySQL服务器使用--secure-file-priv选项运行,因此无法执行此语句
我该如何处理这个错误?
我检查了another question on the same error message,但仍然无法找到解决方案。
我正在使用MySQL 5.6
它按预期工作。您的MySQL服务器已经使用--secure-file-priv选项启动,该选项基本上限制了您可以使用LOAD DATA INFILE
加载文件的目录。
您可以使用SHOW VARIABLES LIKE "secure_file_priv";
查看已配置的目录。
您有两种选择:
secure-file-priv
指定的目录。secure-file-priv
。必须从启动时删除,不能动态修改。为此,请检查MySQL启动参数(取决于平台)和my.ini。我有各种各样的问题。我正在改变my.cnf以及此问题的其他版本试图显示的各种疯狂的事情。
什么对我有用:
我得到的错误
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
我可以通过打开/usr/local/mysql/support-files/mysql.server并更改以下行来修复它:
$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=$?
至
$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=$?
我在Windows 10上遇到了这个问题。“ - MySQL中的--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 | |
+------------------+-------+
关于如何检查secure_file_priv,授予用户并选择输出文件yippeecode.com的详细示例
我遇到过同样的问题。我终于在命令中使用LOCAL
选项解决了问题
LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
你可以在这里找到更多信息http://dev.mysql.com/doc/refman/5.7/en/load-data.html
如果指定了LOCAL,则客户端主机上的客户端程序将读取该文件并将其发送到服务器。该文件可以作为完整路径名提供,以指定其确切位置。如果以相对路径名的形式给出,则相对于启动客户端程序的目录解释名称。
在Ubuntu 14和Mysql 5.5.53上,默认情况下启用此设置。要禁用它,您需要将secure-file-priv = ""
添加到mysqld配置组下的my.cnf文件中。例如:-
[mysqld]
secure-file-priv = ""
我正在使用Debian上的MySQL5.7.11,这个命令对我有用,看看目录是:
mysql> SELECT @@ global.secure_file_priv;
如果文件是您的计算机的本地文件,请在命令中使用LOCAL
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
以下是在Windows 7中禁用secure-file-priv
(vhu's answer的选项#2)的功能:
services.msc
停止MySQL服务器服务。C:\ProgramData\MySQL\MySQL Server 5.6
(在我的情况下,ProgramData
是一个隐藏的文件夹)。my.ini
文件。secure-file-priv=""
services.msc
启动MySQL服务器服务。@vhu
我做了SHOW VARIABLES LIKE "secure_file_priv";
并且它返回了C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
所以当我插入它时,它仍然无法正常工作。
当我直接访问my.ini文件时,我发现路径的格式有点不同:C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
然后,当我用它运行时,它工作。唯一的区别是斜线的方向。
我在'secure-file-priv'中遇到了同样的问题。在.ini文件中注释不起作用,也没有在'secure-file-priv'指定的目录中移动文件。
最后,正如dbc建议的那样,使'secure-file-priv'等于空字符串。因此,如果有人在尝试上面的答案后被卡住了,希望这样做会有所帮助。
对我有用的东西:
secure-file-priv
中指定的文件夹中。要找到该类型:
mysql>显示类似“secure_file_priv”的变量;
local_infile = 1
。打字输入:
mysql>显示类似“local_infile”的变量;
如果你得到:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
然后将其设置为一个输入:
mysql> set global local_infile = 1;
mysql> load data infile“C:/ ProgramData / MySQL / MySQL Server 8.0 / Uploads / file.txt”进入表测试;