the mysql server is running with the-- secure file priv option so it cannot execute this statement




我該如何處理MySQL中的--secure-file-priv? (10)

@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

然後,當我用它運行時,它工作。 唯一的區別是斜線的方向。

我正在學習MySQL並嘗試使用 LOAD DATA 子句。 當我使用它如下:

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

我收到以下錯誤:

MySQL服務器使用--secure-file-priv選項運行,因此無法執行此語句

我該如何處理這個錯誤?

我已經檢查 了同一錯誤消息的另一個問題 ,但仍無法找到解決方案。

我正在使用MySQL 5.6


MySQL使用此系統變量來控制導入文件的位置

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

所以問題是如何更改諸如 secure_file_priv 系統變量。

  1. 關閉 mysqld
  2. sudo mysqld_safe --secure_file_priv=""

現在你可能會看到這樣的:

/var/lib/mysql-files/* rw

在Ubuntu 14和Mysql 5.5.53上,默認情況下啟用此設置。 要禁用它,您需要將 secure-file-priv = "" 到mysqld配置組下的my.cnf文件中。 例如:-

[mysqld]
secure-file-priv = ""

如果你在Ubuntu上運行,你可能還需要配置Apparmor以允許MySQL寫入你的文件夾,例如這裡是我的配置:

將此行添加到文件/etc/apparmor.d/usr.sbin.mysqld:

[client]
loose-local-infile = 1

[mysqld]
secure-file-priv = ""

然後將這兩個配置行添加到/etc/mysql/my.cnf部分:

select id from blahs into outfile '/var/lib/mysql-files/blahs';

這是我的SQL:

 select id from blahs into outfile '/var/lib/mysql-files/blahs'; 

它對我有用。 祝好運!


它按預期工作。 您的MySQL服務器已經使用 --secure-file-priv 選項啟動,它基本上限制了您可以使用 LOAD DATA INFILE 加載文件的目錄。

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

您有兩種選擇:

  1. 將文件移動到 secure-file-priv 指定的目錄。
  2. 禁用 secure-file-priv 。 必須從啟動時刪除,不能動態修改。 為此,請檢查MySQL啟動參數(取決於平台)和my.ini。

對我有用的東西:

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

要找到該類型:

mysql>顯示類似“secure_file_priv”的變量;


  1. 檢查您是否有 local_infile = 1

打字輸入:

mysql>顯示類似“local_infile”的變量;

如果你得到:

$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=$?

然後將其設置為一個輸入:

mysql> set global local_infile = 1;


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

mysql> load data infile“C:/ ProgramData / MySQL / MySQL Server 8.0 / Uploads / file.txt”進入表測試;


我在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. 點擊“進入”

服務器按預期啟動。


我有各種各樣的問題。 我正在改變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" --secure-file-priv="" $other_args >/dev/null &
  wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

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

我遇到過同樣的問題。 我終於使用命令中的 LOCAL 選項解決了問題

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

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

如果指定了LOCAL,則客戶端主機上的客戶端程序將讀取該文件並將其發送到服務器。 該文件可以作為完整路徑名提供,以指定其確切位置。 如果以相對路徑名的形式給出,則相對於啟動客戶端程序的目錄解釋名稱。


有關如何檢查secure_file_priv,授予用戶和選擇outfile yippeecode.com 詳細示例





database