概要
MySQLでデータベースにCSVファイルをインポートしようとしたときに以下のようなエラーが出た。
1 2 3 |
mysql> LOAD DATA LOCAL INFILE "~/share/rounds.csv" -> INTO TABLE rounds FIELDS TERMINATED BY ','; ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides |
MySQLのバージョンが新しいと出るらしく、メッセージにあるようにサーバーとクライアントの双方で許可を与える必要があるそうだ。
手順
クライアント側の指定
mysqlのログイン時にオプションでローカルの入力ファイルを許可する。オプションの書き方は以下2通りのいずれか
--enable-local-infile
--local_infile=1またはon
1 |
$ mysql -u root -p --enable-local-infile |
これを設定しておかないと、後述のグローバルパラメーターを有効にしても、LOAD DATA
実行時に以下のようなエラーが出る。
1 |
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. |
サーバー側の指定
MySQLにログイン後、以下のコマンドでサーバーのlocal_infile
の設定を確認すると0(無効)になっている。
1 2 3 4 5 6 7 |
mysql> select @@local_infile; +----------------+ | @@local_infile | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec) |
local_infile
を有効にして、設定が反映されていることを確認。
1 2 3 4 5 6 7 8 9 10 |
mysql> SET GLOBAL local_infile=on; Query OK, 0 rows affected (0.00 sec) mysql> select @@local_infile; +----------------+ | @@local_infile | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec) |
読み込み成功
1 2 3 4 5 6 |
mysql> LOAD DATA LOCAL INFILE "~/share/rounds.csv" -> INTO TABLE rounds -> FIELDS TERMINATED BY ',' -> LINES TERMINATED BY "\r\n"; Query OK, 1 row affected (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 0 |
1件のコメント