Я пытаюсь выполнить запрос LOAD DATA LOCAL INFILE, чтобы загрузить некоторые данные CSV в таблицу, используя gem mysql2 (0.3.11) под рельсами 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)
Локальный файл включен на сервере:
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, но это не вариант, поскольку файл фактически локальный в производственном процессе, а сервер базы данных удален.Это не имеет ничего общего с правами доступа к файлам, как в этом вопросе.
Это сводит меня с ума, любые идеи очень приветствуются.