【问题标题】:error when run SQL statement运行 SQL 语句时出错
【发布时间】:2011-11-29 15:28:05
【问题描述】:

我正在 Ubuntu 机器上使用 MySQL v5.1 开发 Rails v2.3.2。

MySQL数据目录为/var/lib/mysql/

我有一个位于/var/lib/mysql/tmp/test.dattest.dat 文件

我想将 test.dat 文件中的数据加载到我的数据库表中,因此我在我的 rake 任务之一中执行以下 SQL 语句:

namespace :db do
  task :do_something => :environment do

    sql="LOAD DATA INFILE '/var/lib/mysql/tmp/test.dat'
                INTO TABLE myapp.cars;"

    ActiveRecord::Base.connection.execute(sql);
  end
end

但我收到以下错误:

Mysql2::Error: Can't get stat of '/var/lib/mysql/tmp/test.dat' (Errcode: 2): LOAD DATA INFILE '/var/lib/mysql/tmp/test.dat'

可能是什么原因?

P.S.我想到一件事,/var/lib/mysql/ 只能由 root 用户访问,但我不确定是不是这个原因。

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 mysql-error-1064


    【解决方案1】:

    试试LOAD DATA LOCAL INFILE ...

    【讨论】:

    • 我在想 .dat 位于数据库服务器,本地帮助?
    • 是的!你是对的。当地的帮助!现在它按预期工作,谢谢。顺便说一句,'LOCAL'有什么特殊含义吗,因为我已经使用了 test.dat 的完整路径,为什么我还需要'LOCAL'?
    【解决方案2】:

    正如您提到的 .dat 具有 root 访问权限,
    将其更改为 644 可能会有所帮助

    或者检查ruby中连接mysql的用户账号是否有文件权限

    select File_priv from mysql.user where Host=??? and user=???;
    

    【讨论】:

    • 但我也尝试过先 'sudo su',然后运行我的 rake 任务,它仍然引发错误(虽然我更改为 root 用户)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多