- ベストアンサー
MYSQLのDBに大容量のCSVをUPする方法は?
- さくらインターネットのMYSQLのDBに大容量(約13MB)のCSVファイルをアップロードする方法を教えて下さい。
- 質問者はさくらインターネットでCSVファイルをアップロードしようとしましたが、いくつかの方法を試したものの全件をアップロードすることができませんでした。
- 質問者はCSVファイルを分割してアップロードする方法も考えましたが、検証する方法が分からず困っています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2 です。 Windows 形式のファイルになっていて改行コードが失敗の原因だとしたら・・・・・なのですが、LOAD DATA の最後にある '\n' を '\r\n' にしてあげればたぶんロードできるようになりますよ。 これでもロードできないのであれば、他の原因かもしれません・・・・・・・。
その他の回答 (5)
- nora1962
- ベストアンサー率60% (431/717)
自宅環境が分からないのでなんとも言えません。 自宅PCがwindowsなら「FileZilla_3.5.1_win32-setup.exe」がいいでしょう。
お礼
度々のご回答ありがとうございます。 windowsなので教えていただいたものを使ってみます。 成功しましたが、教えていただいた事は無駄にいたしません。 本当にありがとうございましたm(__)m
- tomaju
- ベストアンサー率76% (84/110)
> 「ERROR 1045 (28000) at line 2513: Access denied for user 'ユーザー名'@'%' (using password: YES)」というエラーが発生します。 ユーザーにFILE権限がないと LOAD DATA INFILE に失敗するそうです。 grant file on *.* to ユーザー名@localhost; で権限を与えるとよさそうです。 LOAD DATA INFILEにはFILE権限 http://d.hatena.ne.jp/kaishitaeiichi/20101114/1289751855
お礼
ご回答ありがとうございます。 test1.txtの中のLOAD DATA文の直前に「grant file on *.* to ユーザー名@localhost;」を 入れましたが、やはり「Access denied for user 'angelito'@'%' (using password: YES)」というエラーが出てしまいます。 MYSQLにログインしてからgrant文を実行すればよいのかと思い、 「mysql -u ユーザー名 -p」を実行してみましたが、 「Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)」が出てしまいます。 この解決法を調べるとmy.cnfをいじらなければいけない様な感じがありますが、レンタルサーバーなのでいじれないように思えます。
- nora1962
- ベストアンサー率60% (431/717)
phpMyAdminはphp経由で一旦ファイルで受けてからロードするのでその制限を受けている可能性はあります。 逃げ方はすでに指摘されていますがSCPかSFTPなどでファイル全体をサーバー側に送ってしまいLOAD DATAするのが確実だと思います。 改行コードはサーバー上ならhexdump | less で0D 0A になっているか0Aなのか判別できます。
お礼
ご回答ありがとうございます。 さくらはSSHが使えるので、SCPとSFTPを調べたらSFTPの方がよさそうだと思い、FileZillaをダウンロードすることにしました。 しかし、よく分からないのが最新のダウンロードファイルには下記の5つがあるのですが、 どれをダウンロードすればよいのでしょうか? 私のPCのosはVISTAです。 FileZilla_3.5.1_x86_64-linux-gnu.tar.bz2 FileZilla_3.5.1_win32.zip FileZilla_3.5.1_win32-setup.exe FileZilla_3.5.1_src.tar.bz2 FileZilla_3.5.1_powerpc-apple-darwin9.app.tar.bz2
- MAXIMAX
- ベストアンサー率60% (50/83)
#1 です。それがエラーの原因かどうかはさておき、なのですが・・・・・・。 簡単に見分ける方法として、CSV ファイルを Windows 上のメモ帳で開いて、ちゃんと改行されて見えるなら、改行コードは'\r\n'になっています。UNIX の '\n' 形式を Windows 上のメモ帳で開くと、改行されずに全部の行がつながって見えます。バイナリエディタでみたり、改行コードの表示に対応したエディアなどで調べるのもひとつの手ですが・・・・・・。 UNIX 上でなら、vi でファイルを開いて、行の最後に ^M が表示されているようなら、Windows 形式の改行になっています(全部の vi でそうなるか、ちょっと自信がありませんが)。 ----- 改行コードについて、Windows 上でのテキストファイルは、通常'\r\n'形式が標準ですが、UNIX では '\n' 形式が標準です。Windows 形式のファイルを UNIX で扱うと、この'\r' も一文字文のデータとして扱われることが多く、誤動作の原因になります。このため、両方で扱うテキストについて、改行コードはきちんと把握しておく必要があります。 ただし、SCP などを使って転送する場合、テキストモードだと改行コードの自動変換などが起きることもありますので、間でファイルのやりとりするときも、気を付けないと意図せず改行コードが変わることがあります。
お礼
度々ありがとうございます。 CSV ファイルを Windows 上のメモ帳で開いて、ちゃんと改行されてみえます。 改行コードにも意識してSFTPあたりを使ってアップロードしてみます。
- MAXIMAX
- ベストアンサー率60% (50/83)
IE からのインポートだと、もしかするとインポートの処理時間がかさむと IE がタイムアウト起こして中止されてしまうのかもしれません。 エラーの内容自体はたしかにちょっと「?」な感じなのですが、実際にエラーの出ている行はなにもおかしなことは見当たらない、ということでしょうか?? 状況から考えると、LOAD DATA で正常にインポートできるサーバとサクラのサーバの間で、なにか環境に違いがあるのではないかな、と思います。一応かかれてはいなかったのでちょっと質問させていただきたいのですが、CSV などで気になるのは、改行コードくらいかな・・・・と思うのですが、CSV は Windows 形式の改行(実態は '\r\n')ではなく、UNIX 形式の改行(実態も '\n' だけ)になってはいますでしょうか?LOAD DATA の最後の '\n' を '\r\n' で試してみてはいかがでしょうか。
お礼
ご回答ありがとうございます。 実際にエラーの出ている行はなにもおかしなことは見当たらないです。 CSVの改行コードについて調べようとエディッタ(Apsaly)でCSVファイルを開いていろいろと表示 形式を変えてみましたが、Windows 形式の改行が'\r\n'となっているのも確認できませんでしたし、 サーバーの中にあるCSVファイルをメモ帳で開くをして開いても改行コードがみれませんでした。 初歩的な質問で申し訳ありませんが、改行コードの実態の確認方法を教えて下さいm(__)m
お礼
ご回答ありがとうございます。 '\n' を '\r\n' に変えてコマンドを投入してみましたが、「LOAD: Command not found.」がでました。 色々と調べているとMYSQLにログインできましたので、そこで次のコマンドを投入したらキレイに全件アップロードできました。 LOAD DATA LOCAL INFILE 'ぱす/KEN_ALL.csv' INTO TABLE DB名.kuin_mst character set 'utf8' FIELDS TERMINATED BY ','; 皆さまには解決するまでお付き合いいただき感謝しています。 中でも一番多く回答をしてくれたMAXIMAXさんをベストアンサーとさせていただきます。 ありがとうございました。