rails:3804
From: 久野@サイベイト <hisano@s...>
Date: Fri, 07 Sep 2012 16:40:37 +0900
Subject: [rails:3804] Re: railsでLOAD DATA INFILE
お世話になります。久野と申します。 自己解決しましたのでご報告いたします。 原因は予想通りクライアント側に取り込み権限がない点でした。 config/environment.rbに以下のコードを追加することで問題なく取り込めました。 |module ActiveRecord module ConnectionAdapters class MysqlAdapter private def connect_with_local_infile @connection.options(Mysql::OPT_LOCAL_INFILE, 1) connect_without_local_infile end alias_method_chain :connect, :local_infile end end end| ■参考URL https://rails.lighthouseapp.com/projects/8994/tickets/6266-cannot-execute-mysql-load-data-infile-query-after-using-verify_active_connections#ticket-6266-12 ※なかなか見つからなかった解決法が、相談したあとすぐに見つかるのはなぜだ ろう? (2012/09/07 15:49), 久野 wrote: > お世話になります。久野と申します。 > > > railsにて大量データの取り込みの必要があったため、LOAD DATA INFILE構文の > 利用を試みたところ、 > 以下のエラーが発生して取り込みに失敗しました。 > > ActiveRecord::StatementInvalid: Mysql::Error: #42000The used command is > not allowed with this MySQL version: LOAD DATA LOCAL INFILE '/path/to/file' > > ・DBへの接続ユーザにFILE権限があることは確認しています。 > ・コマンドラインからの直接実行はOKでした。 > > ぐぐったところ、クライアント側にも許可が必要との情報がありました。 > それによると、以下のように明示的にINFILE取り込み許可を与えれば良いとのこ > とでした。 > $ mysql --local-infile=1 > > このオプションを例えばdatabase.ymlに指定する方法はありますでしょうか。 > もしくは別途解決方法が有りましたら教えてください。 > > ■実行コード > query = <<-SQL > LOAD DATA LOCAL INFILE '/path/to/file' > INTO TABLE table > CHARACTER SET sjis > FIELDS > TERMINATED BY ',' > LINES > TERMINATED BY '\r\n' > IGNORE 1 LINES > ( > ... > ); > SQL > ActiveRecord::Base.connection.execute(query) > > ■実行環境 > $ rails -v > Rails 2.1.1 > $ mysql --version > mysql Ver 14.12 Distrib 5.0.96, for unknown-linux-gnu (x86_64) using > readline 5.1 > > > > -- > ML: rails@r... > 使い方: http://QuickML.com/ >
3803 2012-09-07 08:49 [hisano@s... ] railsでLOAD DATA INFILE -> @ 3804 2012-09-07 09:40 ┗[hisano@s... ]