MACOS Sierra 上的 MySQL 安全文件私有設置
我找不到在哪裡設置
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/"
並重新啟動