LOAD DATA LOCAL INFILE вызывает ошибку Malformed packet с mysql2 gem

Я пытаюсь выполнить запрос LOAD DATA LOCAL INFILE для загрузки некоторых CSV-данных в таблицу с помощью mysql2 gem (0.3.11) под rails 3.1.1:

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

(Это пример приложения для воспроизведения ошибки для этой проблемы на github). Оно продолжает работать на OS X (Lion) со следующей ошибкой:

Mysql2::Error: Malformed packet: LOAD DATA LOCAL INFILE 'test/foo.csv' REPLACE INTO TABLE foos LINES TERMINATED BY '
' (title)

Local infile is enabled on the server:

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. Изменение метода подключения к БД с сокета на TCP/IP ничего не меняет. MySql установлен через homebrew и его версия

mysql  Ver 14.14 Distrib 5.5.15, for osx10.7 (i386) using readline 5.1

Я НЕ получаю эту ошибку, выполняя тот же код под Linux. Он также работает, если я опускаю модификатор LOCAL, но это не вариант, так как файл на самом деле локальный в production, а сервер базы данных удаленный. Это не имеет ничего общего с правами доступа к файлам, как в этом вопросе.

Это сводит меня с ума, любые идеи будут очень признательны.

5
задан Community 23 May 2017 в 10:24
поделиться