DB 開発

[MySQL] Error Code: 1290 secure-file-priv の対処法

[MySQL] Error Code: 1290. The MySQL server is running with the --secure-file-priv の対処法

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

MySQLのテーブルにデータを入れようとすると Error Code: 1290 が発生する場合がある。
新しく用意されたDBに触る際によく起こるエラーなので、今回はこのエラーについて解説する。


Error Code: 1290 とは?

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

直訳するなら以下のようになる。

MySQLサーバーは--secure-file-privのオプションで動いているのでこの命令は実行できません

つまり --secure-file-priv が何かわかれば解決できる。


では--secure-file-privとは?

MySQLの公式サイトには以下のように書かれている。

このオプションは、LOAD_FILE() 関数と LOAD DATA および SELECT ... INTO OUTFILE ステートメントの効果を制限し、指定されたディレクトリ内のファイルにのみ作用します。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.3 サーバーコマンドオプション

ファイルを扱うSQLを指定されたディレクトリ(フォルダ)の中でしか動かないようにする為の制限、ということになる。


エラーを回避するには

オプションによってSQLが制限されているのであれば、回避する方法は2つ。

  • オプションの制限に従うようにSQLを実行する
  • オプションをオフにする


[方法1] オプションの制限に従うようにSQLを実行する

オプションの制限に従うようにSQLを実行するには指定されたディレクトリを知る必要がある。
secure_file_priv で指定されているディレクトリは以下のSQLで確認できる。

SELECT @@global.secure_file_priv;

しかしこの後、以下を試してみたがうまくデータを取り込めなかった。

  • ディレクトリにcsvファイルを置いて LOAD DATA INFILE を実行
  • LOAD DATA INFILE で指定するcsvファイルとしてディレクトリ付きのフルパス指定

従ってこの方法については実行方法を模索中である。


[方法2] オプションをオフにする

--secure-file-priv のオプションを無効化してしまおうというもの。
こちらの手段は検索した際によく出てきた。

オプションの無効化方法は設定ファイルを書き換えて再起動となる。
設定ファイルの場所はMySQLのインストール場所によりけりだが、大体以下の通り。

Windows

C:\ProgramData\MySQL\(MySQLのバージョン)\my.ini

Linux(左から順に読み込んで最後の内容で上書きされる)

/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

参考
* 【Windows】MySQL Server5.7 のmy.cnfファイルの場所 - Qiita
* my.cnfの場所を調べる - Qiita

ファイルが見つかれば中身を見て secure-file-priv の値を空白 "" で設定して再起動すれば終了。
secure-file-priv = ""


まとめ

  • Error Code: 1290 はMySQLにディレクトリの読み書きの制限がかかっているので発生する
  • 回避方法は my.ini または my.cnfsecure-file-priv = "" を設定する


コチラもオススメ

KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-DB, 開発
-,

Translate »

Copyright© ITips , 2021 All Rights Reserved.