目的
MySQLにCSVファイルをインポートするときに少々躓いたので、解決方法を備忘録として投稿します。
流れ
- データベース、テーブル、ユーザーを作成
- 権限の確認と付与
- CSVファイルのインポート
- 躓いた箇所
- 解決策
作成
データベースを作成
create database coffeetypes;
テーブルを作成
create table testtable (
store_name varchar(50) primary key,
address varchar(50) not null,
postal_code varchar(50)
);
ユーザーを作成
create user test@localhost identified by 'test0000';
権限
権限を付与
show grants for test@localhost;
この時点では作成直後のためなにも権限は付与していない
+------------------------------------------+
| Grants for test@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`localhost` |
+------------------------------------------+
下記のコードですべての権限を与える
grant all on *.* to test@localhost;
CSVファイルのインポート
ユーザーを切り替える
先ほど作成したユーザーに切り替えて、CSVファイルのインポートを行う
load data local
infile 'C:/Users/Users/Documents/Programming/Java/DB/javalesson/locationDoutor.csv'
into table coffeetypes.testtable
fields
terminated by ','
;
入力をするとこのようなエラーが発生する
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
DeepLに聞いてみた
エラー 2068 (HY000)。LOAD DATA LOCAL INFILE ファイルリクエストは、アクセス制限のため拒否されました。
ぼく「権限与えたのにアクセス制限あるのか」
解決策
エラーの原因を探る
MySQLのログイン時にオプションでローカルの入力ファイルを許可する必要があり、オプションの書き方は以下2通りある
--enable-local-infile
--local_infile=1 またはon
今回は上記の--enable-local-infile
を検証する
一度ログアウトし、再度インポートを試みる
mysql -u test -p --enable-local-infile
先程と同様に入力
load data local
infile 'C:/Users/Users/Documents/Programming/Java/DB/javalesson/locationDoutor.csv'
into table coffeetypes.testtable
fields
terminated by ','
;
結果
Query OK, 300 rows affected (0.04 sec)
Records: 300 Deleted: 0 Skipped: 0 Warnings: 0
できた!
結論
- csvファイルをインポートするときはログイン時に
--enable-local-infile
を忘れない