ポートフォリオサイトのロゴ
Icon for 【MySQL】CSVファイルをDBにインポートする

【MySQL】CSVファイルをDBにインポートする

MySQLにCSVファイルをインポートする際に躓いた点と解決方法をまとめた備忘録。データベース、テーブル、権限設定について。

目的

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を忘れない

参考資料