hello foo bar Saba note | mysqlでCSVダウンロードできないとかできるとか

mysqlでCSVダウンロードできないとかできるとか

2017.2.27 (月)

MySQLでCSVダウンロードしようと思ったらエラーになった。

$ mysql -u user -p
> mysql use my_db;
> mysql SELECT * FROM access INTO OUTFILE '/tmp/my_db.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

–secure-file-privでもってセキュリティー強くなった模様です。好き勝手なところでデータを落とすことができなくなって、–secure-file-priveで指定したところのみでダウンロードしてねって話らしいです。
パスを確認すると指定されたディレクトリ以外からの操作はデフォルトで不可になっている。

mysql> SELECT @@secure_file_priv;
+-----------------------+
| @@secure_file_priv    |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
1 row in set (0.00 sec)

面倒なので、指定のパスにCSVを落とせばOK。

SELECT * FROM access INTO OUTFILE '/var/lib/mysql-files/my_db.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

バージョン確認したら、

mysql --version
mysql  Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using  EditLine wrapper

これ以上かこれ前後のバージョンでは、–secure-file-privにご注意ということらしいです。
あんまりよろしくないが、/etc/my.cnfで

[mysqld]
secure-file-priv = "" (またはsecure-file-priv=NULL)

を指定してあげると以前のバージョンと同じ動きになってくれるらしいがセキュリティーは断然おちる。
実際設定してみたけど全然有効にならないんですが。。


http://stackoverflow.com/questions/37543177/mysql-making-secure-file-priv-option-to-null