MySQL: load data infile ではまった(local指定) @ Ubuntu

いつもは、以下のようにload dataしている。
mysql> truncate table inttest;
Query OK, 0 rows affected (0.00 sec)

mysql> desc inttest;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id1   | int(10) unsigned | NO   |     | NULL    |       |
| id2   | int(10) unsigned | NO   |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> load data infile '/tmp/test.tsv' into table inttest;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from inttest;
+-----+-----+
| id1 | id2 |
+-----+-----+
|   1 |  10 |
|   2 |  20 |
+-----+-----+
2 rows in set (0.00 sec)

上のコマンドは、Mac上のMySQL(macports mysql5 @5.1.53)で実行したのですが、
これをUbuntuのMySQL(バージョン: 5.1.49-1ubuntu8.1)で実行すると
エラーになるので、原因を調査。
mysql> load data infile '/tmp/test.tsv' into table inttest;
ERROR 29 (HY000): File '/tmp/test.tsv' not found (Errcode: 13)

というエラーになります。 FILE権限ないのかと思ったけど、
rootでもエラーになるのでほとほと困ってましたが、ようやく原因が判明。

Bug #244406 in mysql-dfsg-5.0 (Ubuntu): “ File load data infile'file-name' fails”
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.5 LOAD DATA INFILE 構文

mysql> load data LOCAL infile '/tmp/test.tsv' into table inttest;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

LOCALをつけなさい、ってことですが、必須パラメータなんすかね。
LOCAL以外のファイルを読みたい要望は個人的にはないので、
これからはLOCALをちゃんと指定しようと思う。


人気の投稿