LOAD DATA LOCAL INFILEクエリを発行して、レール3.1.1のmysql2 gem(0.3.11)を使用してCSVデータをテーブルにロードしようとしています:LOAD DATA LOCAL INFILEによってmysql2 gemで不正なパケットエラーが発生する
class Foo < ActiveRecord::Base
def self.load_csv
query = "LOAD DATA LOCAL INFILE 'test/foo.csv' REPLACE INTO TABLE foos LINES TERMINATED BY '\n' (title)"
ActiveRecord::Base.connection.execute(query)
end
end
(これはthis github issueのエラーを再現するためのサンプルアプリケーションです)。これは、次のエラーでOS X(ライオン)にを失敗し続ける:
Mysql2::Error: Malformed packet: LOAD DATA LOCAL INFILE 'test/foo.csv' REPLACE INTO TABLE foos LINES TERMINATED BY '
' (title)
ローカルINFILEがサーバ上で有効になっている:
mysql> show variables where variable_name like '%local%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
とapplication.rbでこのディレクティブを介してクライアントに:
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::LOCAL_FILES
同じLOAD文がMySQLクライアントから正常に動作します。 DB接続方法をソケットからTCP/IPに変更しても違いはありません。 MySQLは自作を介してインストールされたバージョンは、私がLinuxで同じコードを実行し、このエラーを取得しない
mysql Ver 14.14 Distrib 5.5.15, for osx10.7 (i386) using readline 5.1
です。 LOCAL修飾子を省略した場合でも動作しますが、ファイルは実際に本番環境ではローカルで、データベースサーバーはリモートであるため、これはオプションではありません。それはthis質問のようなファイルのアクセス許可とは関係ありません。
これは私をナットにしています。どんな洞察力も大変ありがとうございます。
どのようにあなたがライオンにMySQLをインストールしたのですか?自作を通して? – Romain
はい - 編集した質問に応じて – Thilo
brew install mysqlを実行するときに明示的に '--enable-local-infile'を渡しましたか?そうでない場合は、問題が継続するかどうか試してみることができますか? – Romain