【问题标题】:Mysql2::Error: The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILEMysql2::Error: The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE
【发布时间】:2013-01-14 01:19:01
【问题描述】:

这是我的完整脚本。

我正在尝试做一个 rake 任务,它从目录中的文件收集数据并将它们加载到 mysql 中。

我修复了 local-infile = 1,没有任何效果。它只是给了我错误

namespace :db do
  namespace :load do
    desc "Load Properties into DB"
    task :properties => :environment do
      Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::LOCAL_FILES
      @files = Dir.entries("db/property_website_scripts/")
      connection = ActiveRecord::Base.connection()

      for file in @files
        next if file == "." || file == ".."
        sql = "LOAD DATA LOCAL INFILE '#{Rails.root}/db/property_website_scripts/#{file}'
               INTO TABLE properties
               FIELDS TERMINATED BY '|'
               LINES TERMINATED BY '\r\n'
               (property_type,property_for,city,state,country......);"

        connection.execute(sql)
      end

      #updating created at and updated at
      Property.update_all({:created_at => Time.now, :updated_at => Time.now}, "created_at IS NULL")
    end
  end
end

【问题讨论】:

  • 我之前已经看过那个帖子
  • 那个帖子里直接访问mysql,这是一个rakefile。在mysql中直接使用没有问题,在rakefile中使用时出现问题。
  • 您是在简单地执行 SQL,这与将其放入 MySQL 控制台基本相同。此外,您从 MySQL 得到错误,而不是来自 ruby​​ 或 rails 等,所以“它是一个 rakefile”并不重要。
  • 我知道那部分。我提到了 rake 文件,因为我从 rakefile 中遇到了问题,但在 MySQL 控制台中没有出现问题,我期待 rakefile 的解决方案能够正常工作。

标签: mysql ruby-on-rails rake rails-activerecord rakefile


【解决方案1】:

这篇文章的解决方案对我有用:Enabling local-infile for loading data into remote mysql from rails

将此添加到database.yml

local_infile: true

【讨论】:

    【解决方案2】:

    我突然在mysql2 gem 的0.3.11 版本中遇到了同样的错误。由于我已经使用该版本有一段时间了,我认为这是另一个 gem 的某种依赖问题。尝试升级到版本0.3.12b5,它为我修复了它。

    【讨论】:

    • 我的同事也有同样的问题,更新到 0.3.12b6 并更新了 mysql 开发库并没有解决。 :-(
    猜你喜欢
    • 2012-05-31
    • 2012-10-05
    • 2012-06-01
    • 2020-07-25
    • 2013-01-24
    相关资源
    最近更新 更多