MySQLで--secure-file-priv関連のエラーが発生した件

下記のようなSQL文でcsvファイルの出力を試みました。

SELECT * FROM hogehoge
INTO OUTFILE '/temp.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 というオプションをつけてMySQLサーバーを起動しろということですが、DBの再起動はしたくなかったので、どうにかならないかと思い、調べました。

ソリューション①

下記クエリで secure_file_priv の値を確認したところ、 /var/lib/mysql-files/ が指定されていました。

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.00 sec)

CSVファイル出力する際、この値を出力先として指定することで、問題なくクエリを実行することができました。

ソリューション②

下記のように secure_file_priv を空にすることで、どの場所にもファイルを出力することができるようです。

[mysqld]
secure-file-priv = ""

設定を変更したら sudo systemctl restart mysqld でMySQLを再起動します。

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

まとめ

SHOW VARIABLES LIKE "secure_file_priv"; で設定されている場所を指定すればクエリを実行できます。

再起動が許されるのであれば、コンフィグファイルで secure-file-priv = "" としても良いです。