概要
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件のコメント