write usr test permission mysqld hy000 error errcode create cant mysql file-io

mysql - usr - LOAD DATA INFILE Código de error: 13



error mysqld can t create write to file errcode 13 permission denied (14)

para usuarios de Ubuntu

Estoy ejecutando mysql 5.6.28 en Ubuntu 15.10 y me encontré con exactamente el mismo problema, tenía todos los indicadores necesarios en my.cnf tmpdir = / tmp local-infile = 1 mysql reiniciado y todavía recibiría LOAD DATA INFILE Código de error: 13

Al igual que Nelson mencionó que el problema era "apparmor", una especie de condescendiente mysql sobre permisos, encontré la solución gracias a this tutorial rápido y fácil.

básicamente, suponiendo que tu dir de tmp sería /tmp :

Agregue nuevas entradas tmpdir a /etc/apparmor.d/local/usr.sbin.mysqld

sudo nano /etc/apparmor.d/local/usr.sbin.mysqld

*Agrega esto

/tmp/ r, /mnt/foo/tmp/** rw,

Recargar AppArmor

sudo service apparmor reload

Reiniciar MySQL

sudo service mysql restart

Espero que eso ayude a pocos Ubuntu-ers

En mi MySQL remoto, cuando trato de ejecutar esta consulta, obtengo el código de error de MySQL: 13.

Consulta -

LOAD DATA INFILE ''/httpdocs/.../.../testFile.csv'' INTO TABLE table_temp FIELDS TERMINATED BY '','' LINES TERMINATED BY ''//r //n'' (sku, qty);

Código de error: 13 Can''t get stat of ''/httpdocs/.../.../testFile.csv'' (Errcode: 2)

a. El usuario de la base de datos tiene todos los privilegios de subvención.

CREATE USER ''userName''@''%'' IDENTIFIED BY ''************''; GRANT ALL PRIVILEGES ON * . * TO ''userName''@''%'' IDENTIFIED BY ''************'' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON `userName/_%` . * TO ''userName''@''%'';

segundo. También configuré el permiso de archivo y carpeta para chmod 777 (rwxrwxrwx) usando la herramienta FTP


ANTIGUO:

LOAD DATA INFILE ''/home/root12/Downloads/task1.csv'' INTO TABLE test.task FIELDS TERMINATED BY '','' ENCLOSED BY ''"'' LINES TERMINATED BY ''/n'' IGNORE 1 ROWS; File ''/home/root12/Downloads/task1.csv'' not found (Errcode: 13 - Permission denied)

NUEVO TRABAJO PARA MI:

LOAD DATA LOCAL INFILE ''/home/root12/Downloads/task1.csv'' INTO TABLE test.task FIELDS TERMINATED BY '','' ENCLOSED BY ''"'' LINES TERMINATED BY ''/n'' IGNORE 1 ROWS; Query OK, 500 rows affected, 284 warnings (1.24 sec) Query OK, 5000 rows affected, 2846 warnings (1.24 sec)


Agregando la palabra clave ''LOCAL'' a mi consulta funcionó para mí:

LOAD DATA LOCAL INFILE ''file_name'' INTO TABLE table_name

Una descripción detallada de la palabra clave se puede encontrar here .


El error 13 no es más que los problemas de permisos. Incluso tuve el mismo problema y no pude cargar datos en la tabla mysql y luego resolví el problema yo mismo.

Aquí está la solución:

Por defecto el

--local-infile se establece en el valor 0

, para utilizar LOAD DATA LOCAL INFILE debe estar habilitado.

Entonces, inicie mySQL así:

mysql -u username -p --local-infile

Esto hará que LOCAL INFILE esté habilitado durante el inicio y, por lo tanto, ¡no habrá problemas al usarlo!


Hay una propiedad en el archivo de configuración de mysql en la sección [mysqld] con nombre - tmpdir

por ejemplo:

tmpdir = c:/temp (Windows) or tmpdir = /tmp (Linux)

y el comando LOAD DATA INFILE puede realizar solo lectura y escritura en esta ubicación.

entonces, si coloca su archivo en esa ubicación especificada, LOAD DATA INFILE puede leer / escribir cualquier archivo fácilmente.

Una solución más

también podemos importar datos siguiendo el comando

load data local infile

En este caso, no es necesario mover el archivo a tmpdir, puede indicar la ruta absoluta del archivo, pero para ejecutar este comando, debe cambiar un valor de indicador. La bandera es

--local-infile

puede cambiar su valor por el símbolo del sistema al obtener acceso a mysql

mysql -u username -p --local-infile=1

Aclamaciones


He experimentado el mismo problema y apliqué las soluciones anteriores.

En primer lugar, mi entorno de prueba es el siguiente

  • Ubuntu 14.04.3 64bit
  • mysql Ver 14.14 Distrib 5.5.47, para debian-linux-gnu (x86_64) usando readline 6.3 (instalado solo con el comando ''sudo apt-get install ...'')

Mis resultados de prueba son

i) La solución AppArmor solo funciona para casos / tmp.

ii) La solución siguiente funciona sin la solución de AppArmor. Me gustaría agradecer a Avnish Mehta por su respuesta.

$ mysql -u root -p --in-file=1 ... mysql> LOAD DATA LOCAL INFILE ''/home/hongsoog/study/mysql/member.dat'' -> INTO TABLE member_table;

Tres puntos importantes son

  • inicia el cliente mysql con la opción --in-file = 1
  • utilice LOAD DATA LOCAL INFILE en lugar de LOAD DATA INFILE
  • compruebe que todos los elementos de ruta tengan permiso de lectura mundial desde / a la ruta del archivo de datos. Por ejemplo, el siguiente subtrayecto debe ser legible en todo el mundo o legible por el grupo mysql si INFILE apunta a ''/home/hongsoog/study/mysql/memer.dat''

    • /casa
    • / inicio / hongsoog
    • / inicio / hongsoog / study / mysql
    • /home/hongsoog/study/mysql/member.data

Cuando inicie el cliente mysql SIN la opción "--in-file = 1" y use

LOAD DATA LOCAL INFILE ... , conseguirás

ERROR 1148 (42000): el comando usado no está permitido con esta versión de MySQL

En resumen, la opción "--in-file = 1" en el comando del cliente mysql y "LOAD DATA LOCAL INFILE ..." deberían ir de la mano.

Espero ayudar a cualquiera.


Normalmente, este es un problema de permisos de acceso a archivos, pero veo que ya está abordando eso en el punto b, pero vale la pena revisarlo por si acaso. Otra opción es utilizar LOAD DATA LOCAL INFILE, que supera muchos de los problemas de permisos de acceso a archivos. Para usar este método, primero debe copiar el archivo localmente (en la carpeta mysql es lo mejor). • Si se especifica LOCAL, el programa cliente lee el archivo en el host del cliente y lo envía al servidor.

Permisos de directorio insuficientes

El error en este ejemplo se debe a que el archivo que está intentando importar no está en un directorio legible por el usuario con el que se está ejecutando el servidor MySql. Tenga en cuenta que todos los directorios principales del directorio deben ser leídos por el usuario de MySql para que esto funcione. Guardar el archivo en / tmp generalmente funcionará, ya que generalmente es legible (y editable) por todos los usuarios. El número de código de error es 13. Source

EDITAR:

Recuerde que necesitará permisos no solo en la carpeta que contiene el archivo sino también en los directorios superiores.

Ejemplo de this publicación en los foros de MySql.

Si su archivo estaba dentro de la siguiente estructura: /tmp/imports/site1/data.file

usted necesitaría (creo, 755 trabajó) r + x para ''otro'' en estos directorios:

/ tmp

/ tmp / importaciones

Además de los dos principales:

/ tmp / imports / site1

/tmp/imports/site1/data.file

Necesita que el archivo y el directorio sean legibles por todo el mundo. Disculpas si ya has probado este método, pero vale la pena volver sobre tus pasos, nunca está de más comprobarlo.


Sé que esta publicación es antigua, pero aún aparece en los resultados de búsqueda. No pude encontrar la solución a este problema en línea, así que terminé descifrándome. Si está utilizando Ubuntu, entonces hay un programa llamado "Apparmor" que impide que MySQL vea el archivo. Esto es lo que debe hacer si desea que MySQL pueda leer archivos del directorio "tmp":

sudo vim /etc/apparmor.d/usr.sbin.mysqld

Una vez que esté en el archivo, verá un grupo de directorios que MySQL puede usar. Agregue la línea /tmp/** rwk al archivo (no estoy seguro de que importe dónde, pero aquí hay una muestra de dónde lo puse):

/etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/*.cnf r, /usr/lib/mysql/plugin/ r, /usr/lib/mysql/plugin/*.so* mr, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/** rwk, /tmp/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid w, /var/run/mysqld/mysqld.sock w, /run/mysqld/mysqld.pid w, /run/mysqld/mysqld.sock w,

Ahora todo lo que necesita hacer es volver a cargar Apparmor:

sudo /etc/init.d/apparmor reload

Tenga en cuenta que utilicé "vim", pero lo sustituyo con el editor de texto favorito que sepa usar.


Si está usando Fedora / RHEL / CentOO, puede desactivar temporalmente SELinux:

setenforce 0

Cargue sus datos y luego habilítelo de nuevo:

setenforce 1


Si está utilizando XAMPP en Mac, esto funcionó para mí:

Mover el archivo CSV / TXT a / Aplicaciones / XAMPP / xamppfiles / htdocs / como sigue

LOAD DATA LOCAL INFILE ''/Applications/XAMPP/xamppfiles/htdocs/file.csv'' INTO TABLE `tablename` FIELDS TERMINATED BY '','' LINES TERMINATED BY '';''


Si está utilizando cPanel o phpmyadmin para importar el CSV using LOAD DATA , asegúrese de habilitar la Use LOCAL keyword . Esto funcionó para mí en un entorno de servidor compartido.


Tuve muchos problemas para solucionar esto, hay dos cosas que hacer:

  • actualice el archivo /etc/mysql/my.cnf con local-infile =1 en dos ubicaciones después de los párrafos [mysql] (esto permite utilizar el comando LOCAL INFILE sql).

  • actualice a través de sudo gedit /etc/apparmor.d/usr.sbin.mysqld para que apparmor le permita escribir en los archivos especiales de /var/www/ agregando las líneas:

/name of your directory/ r,

/name of your directory/* rw,

El nombre de su directorio puede ser /var/www/toto/ (esto permite usar el directorio donde se encuentran sus archivos).


Utilizo Ubuntu 12.04, tuve que crear la tabla, luego hago uno de estos:

El uso de local da un error (mysql 5.5):

> LOAD DATA LOCAL INFILE "file.csv" INTO table inverter FIELDS TERMINATED BY '',''; ERROR 1148 (42000): The used command is not allowed with this MySQL version

El comando LOAD DATA INFILE está deshabilitado de manera predeterminada por razones de seguridad, vuelva a habilitarlo aquí y debería funcionar: https://.com/a/16286112/445131

Puede importar el archivo csv usando mysqlimport:

mysqlimport -u root -p --fields-terminated-by='','' --local dbname tablename.csv

Tenga en cuenta que el archivo csv debe tener el mismo nombre antes de la extensión que la tabla.


load data infile ''/root/source/in.txt'' into table employee; ==> Código de error: 13

load data infile ''/tmp/in.txt'' into table employee; ==> funciona

CentOS release 6.6 (Final) - 5.5.32 MySQL Community Server (GPL)

algo relacionado con los permisos de archivos de Linux