MySQLで「ERROR 1290: The MySQL server is running with the –secure-file-priv option so it cannot execute this statement」エラーを解決する方法
MySQLでLOAD DATA INFILE
を使用してCSVファイルをインポートする際に、次のエラーメッセージが表示されることがあります。
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
このエラーは、MySQLサーバーの--secure-file-priv
オプションによる制限が原因です。--secure-file-priv
は、MySQLがファイルをインポートする際に許可するディレクトリを制限するセキュリティ機能です。このエラーを解決するための方法について、詳しく解説します。
1. --secure-file-privオプションの確認
まず、MySQLサーバーがどのディレクトリからファイルをインポートできるかを確認するために、次のSQLクエリを実行してみましょう:
SHOW VARIABLES LIKE 'secure_file_priv';
これを実行すると、MySQLが許可しているファイルインポート用のディレクトリが表示されます。例えば、次のように表示されることがあります:
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| secure_file_priv | /path/to/allowed/directory |
+------------------+----------------------------+
この例では、/path/to/allowed/directory
がMySQLで許可されているディレクトリです。もしLOAD DATA INFILE
を使用するファイルがこのディレクトリにない場合、そのファイルをこのディレクトリに移動する必要があります。許可されたディレクトリで作業するか、セキュアオプションを無効にする必要があります。インポート時はWindowsの場合、//で/をエスケープするのを忘れずに!!
LOAD DATA LOCAL INFILE 'C: //path/to//allowed//directory//file.csv'
INTO TABLE your_table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
2. --secure-file-privオプションを無効化する方法(開発環境向け)
もし開発環境であれば、--secure-file-priv
オプションを無効化することで、任意のディレクトリからファイルをインポートできるようになります。この方法は本番環境では推奨されませんが、開発環境では便利です。
手順は次の通りです
- MySQL設定ファイルを開く MySQLの設定ファイル(
my.cnf
やmy.ini
)を開きます。通常、次のディレクトリにあります:- Linux:
/etc/mysql/my.cnf
または/etc/my.cnf
- Windows:
C:\ProgramData\MySQL\MySQL Server X.X\my.ini
- Linux:
secure-file-priv
の設定をコメントアウトまたは削除 設定ファイル内で、次のような行を探します:secure-file-priv = /path/to/allowed/directory
この行をコメントアウト(行の先頭に#
を追加)または削除します。コメントアウトする例は次の通りです:# secure-file-priv = /path/to/allowed/directory
- MySQLサービスを再起動 設定変更後、MySQLサービスを再起動する必要があります。次のコマンドで再起動できます:
- Linux:
sudo systemctl restart mysql
- Windows: サービス管理ツールでMySQLサービスを再起動
- Linux:
これで、任意のディレクトリからファイルをインポートできるようになります。
3. LOAD DATA LOCAL INFILEを使用する方法
もしCSVファイルがクライアントマシンにある場合、LOCAL
オプションを使用して、クライアント側のファイルをMySQLサーバーに読み込ませることができます。次のようにクエリを修正します:
LOAD DATA LOCAL INFILE 'C:/path/to/your/file.csv'
INTO TABLE your_table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
ここで、LOCAL
を指定することで、クライアント側のファイルをインポートできます。
注意点:
LOCAL
オプションはMySQLサーバー側で無効化されている場合があります。サーバーの設定でLOCAL
が許可されていることを確認する必要があります。- クライアントのMySQL設定で、
--local-infile
オプションが有効になっていることも確認してください。
まとめ
MySQLでLOAD DATA INFILE
を使用する際に、--secure-file-priv
による制限でエラーが発生した場合、次の方法で解決できます
- MySQLが許可しているディレクトリにCSVファイルを移動する。
- 開発環境で
--secure-file-priv
を無効化する。 LOCAL
オプションを使用して、クライアントマシンからファイルをインポートする。
これらの方法を試して、ファイルのインポートを成功させてください。
コメント