みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CSVファイルのインポートについて

宜しくお願いします。
CSVファイルをインポートしようとして、四苦八苦しています。item.csvというファイルをitemという名前のテーブルにインポートしようとしています。

load data local infile "item.csv" into table item fields terminated by ',';

とコマンドを入力すると、

The used command is not allowed with this MySQL version

というエラーが返されます。そこで、

load data infile "item.csv" into table item fields terminated by ',';

と入力すると、

Access denied for user: '****@localhost' (Using password: YES)

というエラーが返されます。
csvファイルの置き場所も解らないので、同じサーバの/public_html/test/php/csv/item.csvという位置と、/public_htmlよりもう一階層上のフォルダにitem.csvというファイルをアップしてあります。
相対パスやサーバがどの程度の階層まで検索してくれるのか解らないので、絶対パスでも指定してみましたが、全く同じエラーが返されてきました。
エラーの内容を翻訳してみたところ、

The used command is not allowed with this MySQL version
「使用されたコマンドは、このMySQL版で許されない」

Access denied for user: '****@localhost' (Using password: YES)
「ユーザー:『****@localhost』(パスワード:YESを使うこと)のために許されないアクセス」

という意味になりました。正直、どうすればいいのかさっぱりわかりません。この状況の打開策をご教授頂ければ助かります。何卒、宜しくお願い致します。尚、MySQLのバージョンはレンタルサーバの情報によると、「3.23.××以降」となっています。

投稿日時 - 2004-10-06 16:01:01

QNo.1030943

困ってます

質問者が選んだベストアンサー

インポートしようとしているテーブルに対してのfile権限が無いだけかな?
それとも、パスワードが間違ってるだけとか

MySQL 3.23.4 以降なら
show grants for ユーザ名
ってやって、file権限があるかどうか調べてくだされ

投稿日時 - 2004-10-07 17:02:22

お礼

ありがとうございます。
早速試してみたら、

There is no such grant defined for user '*****' on host '%'

という文章がかえってきました。直訳してみると・・・

定められるそのような補助金が、ホスト『%』の上にユーザー『*****』のためにない

というメッセージの様です。どうも、権限がないって事みたいです。

もうちょっと色々調べて見ます。ありがとうございました。

投稿日時 - 2004-10-08 09:16:28

ANo.1

このQ&Aは役に立ちましたか?

17人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

実は私もこの所ではまっています。
調べた結果分かったのは、バージョンによってMYSQLIMPORTとLOAD DATAを使い分けないといけないらしいことと、
rootでログインしてgrantコマンドでユーザにアクセス権を与えなければならない(使うDBのもの)ということです。
全て日本MYSQLのサイトで解説していますので、ご一読ください。

投稿日時 - 2004-10-07 22:31:37

お礼

ありがとうございます。
出来ました!MySQLの日本語版マニュアルでload data infileについて検索してみたら、load data localっていう項目が見つかりました。よーく読むと、

The used command is not allowed with this MySQL version

というエラーは、

「サーバ側とクライアント側で両方ともload data localを認めてないよ!!だからダメ!!」

という様な内容だったので、モノはためしで、MySQLから一度ログアウトして、再ログインする時に、

mysql --local-infile=1 -p *****←(*はユーザーIDです。)

と言う形でログインしてみました。それから、

load data local inflie "ぱす/ファイル名.csv" into table テーブル名 fields terminated by',';

と入力したらバッチリ!出来ました。
最初にログインする時の「--local-infile=1」というのが、クライアント側でもこのload data local infileを認めるオプションらしいです。「--local-infile=0」とすると、load data local infileは使えなくなります。セキュリティ上デフォルトでは使えない形でログインする様になっている様です。
ちなみに、ファイルの置き場所は、通常htmlファイルを置いたある「public_html」というフォルダに入れたら読込んでくれなかったので、一番上の階層に置いたら読込みました。フォルダもやはり一番上の階層に作って、そのフォルダに入れてパスを指定すると読込んでくれました。
さらに、load data infileにはいろんなオプションが付いていて、例えば

load data infile "ファイル名.csv" into table テーブル名 fields terminated by ',' ignore 1 lines;

と入力したら、csvファイルの一行目のレコード(各カラム名)は読込まないで2行目のレコードから読ませるなどの設定も出来るそうです。

このコマンド面白いので、もっと色々調べて見たいと思います。ありがとうございました。

参考URL:load data localについて
http://dev.mysql.com/doc/mysql/ja/LOAD_DATA_LOCAL.html

参考URL:load data infileについて
http://dev.mysql.com/doc/mysql/ja/LOAD_DATA.html

投稿日時 - 2004-10-08 09:45:57

あなたにオススメの質問