2011-12-12 23 views
7

Estoy ejecutando MySQL en mi máquina Ubuntu. Revisé /etc/mysql/my.cnf archivo, se muestra mi base de datos de directorio temporal:LOAD DATA INFILE no funciona

... 
basedir  = /usr 
datadir  = /var/lib/mysql 
tmpdir  = /tmp 
... 

Como muestra, mi directorio temporal del servidor MySQL es /tmp.

Tengo un archivo students.dat, el contenido de este archivo es como siguiente:

... 
30 kate name 
31 John name 
32 Bill name 
33 Job  name 
... 

he copiado el archivo anterior students.dat a /tmp directorio. Entonces, ejecute el siguiente comando para cargar los datos de students.dat archivo a los estudiantes mesa en mi base de datos:

LOAD DATA INFILE '/tmp/students.dat' 
      INTO TABLE school_db.students 
      FIELDS TERMINATED BY '\t' 
      LINES TERMINATED BY '\n' 
      (student_id, name, attribute) 

Pero me dieron el mensaje de error en la consola de MySQL:

ERROR 29 (HY000): File '/tmp/students.dat' not found (Errcode: 13) 

Por qué mysql no puede encontrar el archivo students.dataunque el archivo está en el directorio temporal mysql?

P.S.

Los estudiantes mesa es como seguir (ya hay 4 registros de la tabla antes de ejecutar la consulta LOAD DATA INFILE...):

mysql> describe students; 

    +-------------------+--------------+------+-----+---------+-------+ 
    | Field    | Type   | Null | Key | Default | Extra | 
    +-------------------+--------------+------+-----+---------+-------+ 
    | student_id  | int(11)  | YES |  | NULL |  | 
    | name    | varchar(255) | YES | MUL | NULL |  | 
    | attribute   | varchar(12) | YES | MUL | NULL |  | 
    | teacher_id  | int(11)  | YES |  | NULL |  | 
    +-------------------+--------------+------+-----+---------+-------+ 
    4 rows in set (0.00 sec) 

Respuesta

10

echar un vistazo a la sexta post de file not found error. Parece que si se especifica LOAD DATA LOCAL INFILE debería funcionar (Agregaron la palabra clave LOCAL)

+0

'LOCAL INFILE' es una solución alternativa. Una solución para usarlo es cambiar la propiedad del archivo a 'mysql'. Alternativamente, tengo dos instalaciones del mismo servidor y cliente MySQL, y una admite un 'LOAD DATA INFILE' normal. La única diferencia es que '/ var/lib/mysql' de MySQL está en una partición diferente de'/tmp/' –

2

ERROR 29 (HY000): File '/tmp/file_name' not found (Errcode: 13)

Este error se produce principalmente cuando tratamos de cargar el archivo de datos desde cualquier lugar a cualquier tabla en la base de datos MySQL.

Simplemente cambie el propietario de un archivo.

1) Compruebe los permisos del archivo con este comando: ls -lhrt <filename>

2) A continuación, cambie la propiedad: chown mysql.mysql <filename>

3) Ahora intenta LOAD DATA INFILE comando. Funcionará.

Cuestiones relacionadas