エラー内容
下記コマンドで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出力をしてもエラーが出なくなった。