secure_file_privを設定してMySQLのファイル作成権限を変更する

2018年2月2日

MySQLで実行したSQLの出力データをファイルに書き出したかった。

ファイルへの書き出しには SELECT … INTO OUTFILE を使う

通常、ファイルへの書き出しには SELECT … INTO OUTFILE というSQL文を使用するようなのだけれど、そのまま実行したところエラーが出る。
どうやら、ファイルの作成権限がないことが原因の様子。

現在の設定を確認

MySQLにログインした状態で以下のコマンドを使用して、ファイルの作成権限を確認する。

$ mysql> SELECT @@global.secure_file_priv;

ここで設定されているディレクトリにだけファイル出力ができる。
すでに指定されたディレクトリがある場合は、出力先の指定時にそのディレクトリを指定すればOK。
null が指定されている場合はどのディレクトリに対しても出力できないため、設定を変更する必要がある。

設定ファイルの場所を確認

設定変更のため、設定ファイルの場所を確認する。
以下のコマンドを使用。

$ mysql --help | grep my.cnf

設定ファイル my.cnf を作成し、記述を追加

確認した場所に my.cnf ファイルがなければ作成する。
ファイル内に以下の記述を追加。

[mysqld]
secure-file-priv = ""

今回はローカルのため、制限をなくす。
ディレクトリを指定する場合は、クォーテーション内にディレクトリのパスを指定し、代入。

MySQLを再起動

MySQLを再起動してから、設定が反映されていることを確認。

$ mysql> SELECT @@global.secure_file_priv;