お世話になります。久野と申します。

自己解決しましたのでご報告いたします。

原因は予想通りクライアント側に取り込み権限がない点でした。
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@ruby.ml.fdiary.net
使い方: http://QuickML.com/