Linux

MySQL SELECT into outfile 文件被鎖定

  • December 6, 2019

我在 Ubuntu 18.04 上執行的程序在我的 /home/tmp 目錄中執行到 outfile 的 select 語句,但是 mysql 創建的所有文件都被鎖定。我可以手動解鎖它們,但我們的程序需要在創建後立即讀取文件,所以我需要在創建時解鎖它們。

我已經將文件夾權限設置為 777,但是任何新創建的文件仍然被鎖定。這些文件歸 mysql 伺服器所有,“其他”使用者沒有訪問權限。我無法更改這些權限,因為它們不屬於我。

正在執行的 mysql 伺服器是 v8.0.18

在 my.cnf 中,我已將 secure_file_priv 設置為此 /home/tmp 文件夾路徑。

我們在另一台電腦上使用 mysql server 5.7.27 執行相同的程序,並且文件沒有鎖定在那裡,所以我不確定問題是什麼。

請幫忙!謝謝。

編輯:澄清

  • “鎖定”是指在文件中查看文件時,該文件的圖示上有一個掛鎖符號。
  • 我在嘗試打開文件時收到的錯誤消息顯示“訪問“/home/tmp/filename”被拒絕。
  • 我的選擇語句類似於“ SELECT * INTO OUTFILE ‘/home/tmp/file.csv’ FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘"’ LINES TERMINATED BY ‘\n’ FROM device ”

您已經從 MySQL 文件中看到了此註釋(請參閱https://dev.mysql.com/doc/refman/8.0/en/select-into.html):

從 MySQL 8.0.17 開始,文件創建的 umask 為 0640;您必須具有足夠的訪問權限才能操作文件內容。在 MySQL 8.0.17 之前,umask 為 0666,該文件可由伺服器主機上的所有使用者寫入。

所以這些文件只能被 MySQL 執行的任何組讀取。您可以將您的使用者添加到該組,但這可能會提供超出預期的訪問權限(例如,直接訪問數據庫數據文件)。

另一種選擇,如果您的文件系統支持 ACL(大多數都支持)是查看預設 ACL 是否會覆蓋 MySQL 設置的權限,請嘗試以下操作(在轉儲正在寫入的目錄上):

sudo setfacl -m 'd:u:«YOUR-USER»:r' /home/tmp

這會將“預設”ACL 設置為自動將 ACL 放置在/home/tmp允許 «YOUR-USER» 讀取它們時創建的任何文件上。如果你也需要寫信給他們,你會rw改用。

引用自:https://unix.stackexchange.com/questions/555823