• ベストアンサー

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.××以降」となっています。

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

インポートしようとしているテーブルに対してのfile権限が無いだけかな? それとも、パスワードが間違ってるだけとか MySQL 3.23.4 以降なら show grants for ユーザ名 ってやって、file権限があるかどうか調べてくだされ

nikuq
質問者

お礼

ありがとうございます。 早速試してみたら、 There is no such grant defined for user '*****' on host '%' という文章がかえってきました。直訳してみると・・・ 定められるそのような補助金が、ホスト『%』の上にユーザー『*****』のためにない というメッセージの様です。どうも、権限がないって事みたいです。 もうちょっと色々調べて見ます。ありがとうございました。

その他の回答 (1)

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.2

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

nikuq
質問者

お礼

ありがとうございます。 出来ました!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

関連するQ&A