mysql - LOAD DATA LOCAL INFILE 导致 mysql2 gem 出现 Malformed packet error

标签 mysql ruby-on-rails ruby-on-rails-3 macos mysql2

我正在尝试发出 LOAD DATA LOCAL INFILE 查询,以使用 rails 3.1.1 下的 mysql2 gem (0.3.11) 将一些 CSV 数据加载到表中:

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 (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 修饰符,它也可以工作,但这不是一个选项,因为文件实际上在生产中是本地的,而数据库服务器是远程的。它与文件权限无关,如 this问题。

这让我抓狂,非常感谢任何见解。

最佳答案

应该为 mysql2 v > 0.3.12b4 修复问题

使用 LOCAL_FILE 标志对我不起作用,但将 :local_infile => true 添加到选项中就可以了

1.9.3p194 :011 > a = Mysql2::Client.new(:username=>'root', :host=>'localhost', :password=>'', :database=>'bhl_indexer', :local_infile => true)

https://github.com/brianmario/mysql2/issues/293

关于mysql - LOAD DATA LOCAL INFILE 导致 mysql2 gem 出现 Malformed packet error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8790874/

相关文章:

mysql - 跟踪可用整数池的最佳方法是什么?

php - MySQL - PHP - 避免多个查询来计算结果

ruby-on-rails - 来自变量名称的 rails 引用模型

ruby-on-rails - bundle 安装不适用于 capistrano

ruby-on-rails - Rails 3.1界面设计——级联下拉、表单输入

ruby-on-rails - 优雅地停止执行没有失败状态的重新请求作业?

php - 将值从 php 传递到 html

c# - 获取当前列名

ruby-on-rails - 在 rails 和 prawn 中将文本环绕在图像周围

javascript - Gmaps4rails : How to change appearance of marker when user clicks link in sidebar?