web-dev-qa-db-ja.com

MySQLのMACOS Sierraのsecure-file-priv設定

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がまったく動作しません。

3
Peter Juselius

mysqlのMac OS X起動パラメーターで.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スクリプトとツールです。

4
a_vlad

新しいファイル/etc/my.cnfを作成し、次の行を追加します

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

そして再起動

1
KayV