ローカルに立てたデータベースサーバにローカルのCSVファイルからデータを読み込ませようとしたらエラーになったときのメモ。
エラー内容
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
実行環境
- OS : macOS Mojave (10.14.6)
- MySQL : バージョン 5.7.25
実行したクエリ
LOAD DATA INFILE '/Applications/sample/TEST.CSV' INTO TABLE `something` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
正しいクエリ
LOAD DATA LOCAL INFILE '/Applications/sample/TEST.CSV' INTO TABLE `something` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
LOAD DATA INFILE ...
ではなくて LOAD DATA LOCAL INFILE ...
とすることでエラーを吐かずに実行できました。前者はサーバ上のファイルを読み込む場合、後者はローカルのファイルを読み込む場合に使用します。
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
のエラー内容で検索するとDBの設定ファイル、my.cnfやらmy.iniやらを編集するという記事がよく出てくるのですが、自分の場合、設定ファイルは特に触らずいけました。
また、クエリ内のテーブル名よりも後ろはオプションなので、どのような処理を走らせたいかで変わってくると思います。
ちなみにテーブル名 something
のところをバッククォートで囲っていますが、SQLの予約語だったときにエスケープするためなので、基本バッククォートはなくても実行可能です。(むしろ予約語ならなるべくその名前を使わない方が良いと思うのでどうしてもという場合以外はなくて良いかも)
今日はそんな感じです!
参考URL
MySQLでファイルのデータをテーブルに挿入する
MySQLでCSVファイルを使って結果出力やデータ入力を行う方法
secure_file_privを設定してMySQLのファイル作成権限を変更する
[ MySQL ] データをCSVでエクスポートしようとして、secure-file-privに引っかかった件
phpMyAdminのSQLに付加される「’」に似た記号「`」は何?