Error cuando se ejecuta la instrucción SQL
-
25-10-2019 - |
Pregunta
Estoy desarrollando Rieles v2.3.2 con Mysql v5.1 en Ubuntu máquina.
Mysql El directorio de datos es /var/lib/mysql/
tengo un test.dat
archivo ubicado en /var/lib/mysql/tmp/test.dat
Me gustaría cargar datos del test.dat
Archivo en la tabla de mi base de datos, por lo que ejecuto la siguiente instrucción SQL en una de mis tarea de rastrillo:
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
Pero recibí el siguiente error:
Mysql2::Error: Can't get stat of '/var/lib/mysql/tmp/test.dat' (Errcode: 2): LOAD DATA INFILE '/var/lib/mysql/tmp/test.dat
'
¿¿Cuál podría ser la razón??
PD Una cosa me viene a la mente es que /var/lib/mysql/
solo se puede acceder por Usuario de raíz, pero no estoy seguro de si es la razón.
Solución
Probar LOAD DATA LOCAL INFILE ...
.
Otros consejos
Como menciona el .dat tiene permiso de acceso a la raíz,
cambiarlo a 644 podría ayudar
O verifique la cuenta de usuario que conectar MySQL en Ruby tiene los privilegios de archivo
select File_priv from mysql.user where Host=??? and user=???;