作業メモ。 タイトルの通り、MySQLでcsvファイルをインポートしようとしたらハマったのでその対応策まとめ。
MySQLのInnoDBの行ロック周りのあれこれを勉強しようと思って、ネットで拾ったデータをCSV形式にして手元に保存。
※CSVデータのインポートコマンドについては...
さっそくローカルのMySQLでデータをインポートしようと試みたところ
mysql> LOAD DATA LOCAL INFILE '/tmp/hoge.csv' INTO TABLE zuno_o FIELDS TERMINATED BY ',' ENCLOSED BY '"'; ERROR 1148 (42000): The used command is not allowed with this MySQL version
と出てしまった。
「えーversionとか...なんだ、面倒だけどアプデとかしないとダメなのかー?」
と最初は思ったが
(あれ?手元のversionそんなに古くないはずだぞ?)
と思い、とりあえずググることに。
(mysql) コマンド行クライアントの場合、--local-infile[=1] オプションを指定することによって LOAD DATA LOCAL を有効にするか、--local-infile=0 オプションを指定することによってこれを無効にします。 (中略) サーバーまたはクライアントのいずれかで LOAD DATA LOCAL が無効な場合、そのようなステートメントを発行しようとしたクライアントは次のエラーメッセージを受け取ります。 ERROR 1148: The used command is not allowed with this MySQL version
※MySQL 5.6 リファレンスマニュアル LOAD DATA LOCAL のセキュリティーの問題
詳しくは上のURLを読んで欲しいですが、セキュリティがらみの問題でデフォルトではできなくなっている模様。
ということで...
$ mysql -u (USER) -p (PASSWORD) --local_infile=1 ... mysql> LOAD DATA LOCAL INFILE '/tmp/hoge.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"'; Query OK, 18 rows affected, 28 warnings (0.00 sec) Records: 22 Deleted: 0 Skipped: 4 Warnings: 28
やったぜ!!
ちなみに、my.cnfに
[client] loose-local-infile=1
を追加するのでもOK。