【MySQL8.0】CSVデータを出力しようとしたらエラーになる件(解決方法)

2020年5月31日

MySQL8.0で「INTO OUTFILE」を使ってCSV出力を試みると、、おや?何やらエラーが発生。

「ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement」

どうしたのでしょうか?

目次

1.エラー発生の経緯

「ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement」

MySQLでは「INTO OUTFILE」を使用してSELECTの結果をファイルに出力することが出来ます。

それで「INTO OUTFILE」を使用してCSVファイルを出力すべく以下のSQLを実行しました。

ところが前述のエラーとなったのです。

スポンサードサーチ

2.エラーの原因

これはMySQLのセキュリティの強化によるもので、MySQLの設定ファイルで「secure-file-priv」に値が設定されている場合はそのディレクトリにのみ出力が許されるのです。

つまり、「secure-file-priv」の値を空にすれば出力先はどこでも許されることとなります。

「secure-file-priv」の値は以下のSQLで確認することが出来ます。

select @@secure_file_priv;

「secure-file-priv」に設定されている値のディレクトリにファイルを出力する場合は正常に処理されます。

スポンサードサーチ

3.解決方法

前述のように「secure-file-priv」に設定されている値のディレクトリにしかファイルを出力できないのでは不便です。
自由に指定できるように変更します。

1)設定ファイルの変更

まずMySQLの設定ファイルに記述されている「secure-file-priv」の値を変更します。

設定ファイルは通常「C:\ProgramData\MySQL\MySQL Server 8.0\Uploads」フォルダに「my.ini」というファイル名で存在します。

テキストエディタでこのファイルを開いて編集します。

追加するのは以下の1行です。
secure-file-priv=""

下記のように元のsecure-file-prevの行をコピーして追加すると良いでしょう。(元の行はコメントにしておきます)

編集が終わったら保存して閉じてください。

2)MySQLを再起動する

変更を反映させるためにMySQLのサービスを再起動してください。

Windowsのスタートを右クリック→コンピューターの管理→サービスとアプリケーション→サービス→MYSQL80

※バージョンによって「MYSQL80」の80の部分が変わります。

「MYSQL80」を右クリックして「再起動」です。

3)動作確認

サービスを再起動したので再度MySQLクライアントはセッションを接続しなおしてください。

エラーになっていたCSVファイルを出力するSQLを実行してみます。

今度はうまくいきました。