MySQLでCSV出力しようとしたら --secure-file-priv option のエラーになった

  • 1
    いいね
  • 0
    コメント

エラー内容

下記コマンドでCSVファイルを出力しようとした。

SELECT *
  FROM table
  INTO OUTFILE '/tmp/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
;

そうしたら次のエラー内容が出力された。

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

secure-file-priv optionという、データの入出力を制限するオプションのエラー。

解決策 (Mac OS X)

取りあえずどういう設定がされているのかを確認。

mysql> SELECT @@global.secure_file_priv;

+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| NULL                      |
+---------------------------+

ここがNULLのせいのよう。
この設定をmy.cnfで調整する。

my.cnfが読み込まれる場所を確認

$ mysql --help | grep my.cnf

order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

/usr/local/etc/my.cnf に設定ファイルを置くことにする。

Homebrewで入れたMySQLのmy-xxx.cnfの場所を確認

$ find /usr/local/Cellar/mysql -name "my*.cnf"

/usr/local/Cellar/mysql/5.7.17/support-files/my-default.cnf

設定ファイルをコピー

$ cp /usr/local/Cellar/mysql/5.7.17/support-files/my-default.cnf /usr/local/etc/my.cnf

設定を変更する

/usr/local/etc/my.cnf に下記設定を追加する。

[mysqld]
secure-file-priv = ""

これでCSV出力をしてもエラーが出なくなった。

参考