MySQL SELECT into outfile 文件被鎖定
我在 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
改用。