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.dat
aunque 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)
'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/' –