【问题标题】:Plain Old Ruby data load local in File普通旧 Ruby 数据在文件中本地加载
【发布时间】:2015-03-24 18:35:12
【问题描述】:

问题:MYSQL 和 RUBY(不是使用 rails?)给出错误:

此 MySQL 版本不允许使用的命令 (Mysql::Error)

亲爱的朋友们,

  1. 我可以从命令行发出这个,但不能从我的 ruby​​(没有 rails)发出。

    mysql> 将数据本地infile 'remediation_rewrite.csv' 加载到表report.remediation IGNORE 1 行(MACHINE_NAME,TYPE_OF_ACTION,SCORE,FILE_PATH,MD5,REGKEY,VThit,action,action_result,action_result_detail,日期); 查询正常,455168 行受影响,65535 条警告(22.35 秒)

2) Ruby 命令因以下原因而失败:

column = "(MACHINE_NAME , TYPE_OF_ACTION , SCORE , FILE_PATH , MD5,  REGKEY , VThit, action , action_result, action_result_detail, date)"
    str = "Load data local infile " + "'" + "remediation_rewrite.csv" + "'" + " into table report.remediation" + " IGNORE 1 lines " + "#{column}" + ";";
    p str
    @con = Mysql.new("172.16.10.193", "myusername","xxx", "reporttdatabase")
    @con.options(Mysql::OPT_LOCAL_INFILE, true)
    rs = @con.query(str)

【问题讨论】:

  • 文件的完整路径是什么? remediation_rewrite.csv
  • /home/myuser/database_parser/remediation_rewrite.csv
  • 我加了全路径还是不行;
  • Generate_Remediation_Report.rb:100:in `query': 此 MySQL 版本不允许使用的命令 (Mysql::Error)
  • 您使用哪个 gem 来执行 MySQL?它很可能根本不支持LOAD DATA 命令,因为它声明。您可以尝试使用“mysql2”gem。

标签: mysql ruby


【解决方案1】:

根据'mysql2' gem documentation,出于安全原因,您需要将:local_infile指定为true(解释为here,并引用here)。

将此替换为您的 @con 客户端对象:

@con = Mysql2::Client.new(
  host: "172.16.10.193", 
  username: "myusername",
  password: "xxx", 
  database: "reporttdatabase",
  local_infile: true
)

【讨论】:

  • 我在这个问题上花了 6 个多小时。很遗憾你只花了5分钟就回答了;谢谢。
猜你喜欢
  • 2017-06-28
  • 2011-01-16
  • 2023-01-31
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多