2012-09-14 32 views
6

Recibo un error cuando uso datos de carga para insertar la consulta.MySQL: Cargar datos infile

"load data infile '/home/bharathi/out.txt' into table Summary" 

Este archivo está allí. Pero mysql arroja el siguiente error. ERROR 29 (HY000): Archivo '/home/bharathi/out.txt' not found (Errcode: 13)

show variables like 'data%'; 
+---------------+-----------------+ 
| Variable_name | Value   | 
+---------------+-----------------+ 
| datadir  | /var/lib/mysql/ | 
+---------------+-----------------+ 

datos Dir está apuntando a la carpeta raíz permissioned. No puedo cambiar esta variable porque es de solo lectura.

¿Cómo puedo hacer la operación de cargar datos de archivo?

He intentado cambiar los permisos de los archivos, cargar los datos del archivo local. No funcionará

+0

¿En qué sistema (servidor o cliente) está el archivo? – eggyal

+0

Servidor y cliente o la misma máquina. – kannanrbk

Respuesta

11

como se documenta bajo LOAD DATA INFILE Syntax:

Por razones de seguridad, al leer archivos de texto ubicados en el servidor, los ficheros deben residir en el directorio de base de datos o ser leído por todos. Además, para usar LOAD DATA INFILE en los archivos del servidor, debe tener el privilegio FILE. Ver Section 6.2.1, “Privileges Provided by MySQL”. Para operaciones de carga que no sean LOCAL, si la variable de sistema secure_file_priv está configurada en un nombre de directorio no vacío, el archivo que se va a cargar debe estar ubicado en ese directorio.

Usted debe, por tanto, ya sea:

  • Asegúrese de que el usuario de MySQL tiene el privilegio FILE y, suponiendo que la variable secure_file_priv sistema no está configurado:

    • crea el archivo legible Por todos; o

    • mueva el archivo al directorio de la base de datos.

  • O bien, utilizar la palabra clave LOCAL tener el archivo leído por el cliente y se transmite al servidor. Sin embargo, tenga en cuenta que:

    LOCAL funciona solo si su servidor y su cliente están configurados para permitirlo. Por ejemplo, si mysqld se inició con --local-infile=0, LOCAL no funciona. Ver Section 6.1.6, “Security Issues with LOAD DATA LOCAL.

+0

Batirme por segundos ... +1 – fancyPants

8

La solución que realmente funcionó para mí fue:

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv 

Adición para futuras referencias.

Cuestiones relacionadas