我该如何处理MySQL中的--secure-file-priv?

问题描述 投票:266回答:13

我正在学习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 database
13个回答
375
投票

它按预期工作。您的MySQL服务器已经使用--secure-file-priv选项启动,该选项基本上限制了您可以使用LOAD DATA INFILE加载文件的目录。

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

您有两种选择:

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

3
投票

我有各种各样的问题。我正在改变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=$?

1
投票

我在Windows 10上遇到了这个问题。“ - MySQL中的--secure-file-priv”为了解决这个问题,我做了以下工作。

  1. 在Windows搜索(左下角)中,我输入了“powershell”。
  2. 右键单击powershell并以管理员身份运行。
  3. 导航到服务器bin文件。 (C:\ Program Files \ MySQL \ MySQL Server 5.6 \ bin);
  4. 键入./mysqld
  5. 点击“进入”

服务器按预期启动。


1
投票

MySQL使用此系统变量来控制导入文件的位置

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

所以问题是如何改变系统变量,如secure_file_priv

  1. 关闭mysqld
  2. sudo mysqld_safe --secure_file_priv=""

现在你可能会看到这样的:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

-1
投票

关于如何检查secure_file_priv,授予用户并选择输出文件yippeecode.com的详细示例


198
投票

我遇到过同样的问题。我终于在命令中使用LOCAL选项解决了问题

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

你可以在这里找到更多信息http://dev.mysql.com/doc/refman/5.7/en/load-data.html

如果指定了LOCAL,则客户端主机上的客户端程序将读取该文件并将其发送到服务器。该文件可以作为完整路径名提供,以指定其确切位置。如果以相对路径名的形式给出,则相对于启动客户端程序的目录解释名称。


96
投票

在Ubuntu 14和Mysql 5.5.53上,默认情况下启用此设置。要禁用它,您需要将secure-file-priv = ""添加到mysqld配置组下的my.cnf文件中。例如:-

[mysqld]
secure-file-priv = ""

31
投票

我正在使用Debian上的MySQL5.7.11,这个命令对我有用,看看目录是:

mysql> SELECT @@ global.secure_file_priv;


17
投票

如果文件是您的计算机的本地文件,请在命令中使用LOCAL

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

14
投票

以下是在Windows 7中禁用secure-file-privvhu's answer的选项#2)的功能:

  1. 进入services.msc停止MySQL服务器服务。
  2. C:\ProgramData\MySQL\MySQL Server 5.6(在我的情况下,ProgramData是一个隐藏的文件夹)。
  3. 在记事本中打开my.ini文件。
  4. 搜索'secure-file-priv'。
  5. 通过在行的开头添加“#”来注释掉行。对于MySQL Server 5.7.16及更高版本,评论将不起作用。你必须将它设置为像这样的空字符串 - secure-file-priv=""
  6. 保存文件。
  7. 通过进入services.msc启动MySQL服务器服务。

9
投票

@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

然后,当我用它运行时,它工作。唯一的区别是斜线的方向。


7
投票

我在'secure-file-priv'中遇到了同样的问题。在.ini文件中注释不起作用,也没有在'secure-file-priv'指定的目录中移动文件。

最后,正如dbc建议的那样,使'secure-file-priv'等于空字符串。因此,如果有人在尝试上面的答案后被卡住了,希望这样做会有所帮助。


4
投票

对我有用的东西:

  1. 将您的文件放在secure-file-priv中指定的文件夹中。

要找到该类型:

mysql>显示类似“secure_file_priv”的变量;

  1. 检查你是否有local_infile = 1

打字输入:

mysql>显示类似“local_infile”的变量;

如果你得到:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+

然后将其设置为一个输入:

mysql> set global local_infile = 1;

  1. 指定文件的完整路径。就我而言:

mysql> load data infile“C:/ ProgramData / MySQL / MySQL Server 8.0 / Uploads / file.txt”进入表测试;

© www.soinside.com 2019 - 2024. All rights reserved.