Mysql

MACOS Sierra 上的 MySQL 安全文件私有設置

  • May 10, 2019

我找不到在哪裡設置secure-file-priv。我收到這條消息:

1290 - MySQL 伺服器正在使用 –secure-file-priv 選項執行,因此它無法執行此語句

執行此語句時:

SELECT COLUMN_NAME, data_type FROM tabledefs INTO  OUTFILE  'xpeter'

如果我刪除OUTFILE 'xpeter' 它有效。 OUTFILE '/tmp/xpeter也不起作用。

我嘗試添加--secure-file-priv="/tmp",沒有變化。變數保持為 NULL:

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="/tmp"    $other_args >/dev/null &  

/usr/local/mysql/bin/mysqld --verbose --help | grep secure-file
 --secure-file-priv=name 
secure-file-priv                                             NULL

沒有my.cnf文件。我遍歷整個文件系統,尋找任何*.cnf文件。./mysql-5.7.17-macos10.12-x86_64/data/auto.cnf除了:和之外找不到任何其他內容./mysql-5.7.17-macos10.12-x86_64/support-files/my-default.cnf。該行在$bindir/mysqld... .support-files/my-default.cnf

我重新執行不帶 的查詢OUTFILE 'xpeter',查詢 OK,日誌文件中沒有消息,除了apache2 log. 然後我跑

SELECT COLUMN_NAME, data_type INTO  OUTFILE  'xpeter' FROM tabledefs

日誌文件中沒有錯誤,僅在 phpmyadmin 中(我從中執行查詢語句,以 root 身份登錄):與以前相同的消息。

我嘗試了etc/my.cnf並且還:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
     <key>ProgramArguments</key>
       <array>
  <string>--secure-file-priv=/mysql_exp</string>
       </array>
   <key>WorkingDirectory</key>  <string>/usr/local/mysql</string>
</dict>
</plist>

在重新啟動後的這兩種情況下,我仍然不允許寫入文件。

我沒有更改文件夾所有者。如果我添加--secure-file-priv=/mysql_exp到守護程序並重新啟動 MySQL 根本不會執行。

在mac os x上mysql的啟動參數可以通過編輯.plist文件來改變

地點:

/Library/LaunchDaemons
com.oracle.oss.mysql.mysqld.plist

使用 Xcode 或例如 BBEdit,並在 ProgramArguments 部分添加行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Disabled</key>
   <false/>
   <key>ExitTimeOut</key>
   <integer>600</integer>
   <key>GroupName</key>
   <string>_mysql</string>
   <key>KeepAlive</key>
   <false/>
   <key>Label</key>
   <string>com.oracle.oss.mysql.mysqld</string>
   <key>LaunchOnlyOnce</key>
   <false/>
   <key>ProcessType</key>
   <string>Interactive</string>
   <key>Program</key>
   <string>/usr/local/mysql/bin/mysqld</string>
   <key>ProgramArguments</key>
   <array>
       <string>/usr/local/mysql/bin/mysqld</string>
       <string>--user=_mysql</string>
       <string>--basedir=/usr/local/mysql</string>
       <string>--datadir=/usr/local/mysql/data</string>
       <string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
       <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
       <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
       <string>--secure-file-priv=/mysql_exp</string>
   </array>
   <key>RunAtLoad</key>
   <false/>
   <key>SessionCreate</key>
   <true/>
   <key>UserName</key>
   <string>_mysql</string>
   <key>WorkingDirectory</key>
   <string>/usr/local/mysql</string>
</dict>
</plist>

重新啟動 MySQL 並檢查:

mysql> show variables like 'secure%';
+------------------+-------------+
| Variable_name    | Value       |
+------------------+-------------+
| secure_auth      | ON          |
| secure_file_priv | /mysql_exp/ |
+------------------+-------------+
2 rows in set (0.00 sec)

添加:

如果直接在 /etc/ 中創建 my.cnf 文件,您可以獲得相同的結果

sudo nano /etc/my.cnf

您可以從複製範例文件

/usr/local/mysql/support-files/

只是註釋註釋-“複製/過去”這不是一種方法,即使在您的 Mac 上您也根本不需要文件導入/導出,只需使用普通工具,例如:

  • MySQL 工作台
  • Navicat for MySQL
  • JetBrain IDE(大部分都有數據庫模組)
  • DBVisualizer

他們中的任何一個都可以幫助您:

  • 將查詢結果導出為不同格式 - csv、分隔文件、json、xls
  • 將流行的文件格式直接導入表中,並將列映射到數據類型

手動文件級導入/導出在您需要自動化流程的生產環境中可能很有用,但現在它是更多的備份方式,主要和適當的 - ETL 腳本和工具。

創建一個新文件 /etc/my.cnf 並添加以下行

[mysqld_safe]
[mysqld]
secure_file_priv="/Users/abc/"

並重新啟動

引用自:https://dba.stackexchange.com/questions/168768