PR

【解決】MySQLで「ERROR 1290: The MySQL server is running with the –secure-file-priv option so it cannot execute this statement」エラーを解決する方法


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オプションを無効化することで、任意のディレクトリからファイルをインポートできるようになります。この方法は本番環境では推奨されませんが、開発環境では便利です。

手順は次の通りです

  1. MySQL設定ファイルを開く MySQLの設定ファイル(my.cnfmy.ini)を開きます。通常、次のディレクトリにあります:
    • Linux: /etc/mysql/my.cnf または /etc/my.cnf
    • Windows: C:\ProgramData\MySQL\MySQL Server X.X\my.ini
  2. secure-file-privの設定をコメントアウトまたは削除 設定ファイル内で、次のような行を探します: secure-file-priv = /path/to/allowed/directory この行をコメントアウト(行の先頭に # を追加)または削除します。コメントアウトする例は次の通りです: # secure-file-priv = /path/to/allowed/directory
  3. MySQLサービスを再起動 設定変更後、MySQLサービスを再起動する必要があります。次のコマンドで再起動できます:
    • Linux: sudo systemctl restart mysql
    • Windows: サービス管理ツールでMySQLサービスを再起動

これで、任意のディレクトリからファイルをインポートできるようになります。

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による制限でエラーが発生した場合、次の方法で解決できます

  1. MySQLが許可しているディレクトリにCSVファイルを移動する。
  2. 開発環境で--secure-file-privを無効化する。
  3. LOCALオプションを使用して、クライアントマシンからファイルをインポートする。

これらの方法を試して、ファイルのインポートを成功させてください。

コメント

タイトルとURLをコピーしました