Cómo puedo corregir el Error de Carga de MySQL


No estoy muy seguro de que una pregunta similar a esta fue cerrada por estoy tratando de ejecutar el siguiente programa MySQL.

mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"

En la línea de comandos de bash y obtener este error

ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version

¿Cómo puedo solucionar este problema?

En realidad estoy ejecutando este comando desde un programa Python, pero saqué el comando para intentar juguetear con él en la línea de comandos bash.

He visto cómo puedo modificar mi.cnf (local-infile), pero no quiero que global un cambio si puede evitarlo.

Aquí está la versión de MySQL.

mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2

Author: shgnInc, 2013-04-29

4 answers

Como se documenta en Problemas de seguridad con LOAD DATA LOCAL:

Para lidiar con estos problemas, cambiamos cómo LOAD DATA LOCAL se maneja a partir de MySQL 3.23.49 y MySQL 4.0.2 (4.0.13 en Windows):

  • Por defecto, todos los clientes y bibliotecas MySQL en distribuciones binarias se compilan con la opción --enable-local-infile, para ser compatibles con MySQL 3.23.48 y anteriores.

  • Si compila MySQL desde el código fuente pero no invoca configure con el --enable-local-infile opción, LOAD DATA LOCAL no puede ser utilizado por ningún cliente a menos que esté escrito explícitamente para invocar mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0). Ver la sección 20.6.6.49, "mysql_options()".

  • Puede deshabilitar todos LOAD DATA LOCAL declaraciones desde el lado del servidor por partida mysqld con el --local-infile=0 opción.

  • Para el cliente de línea de comandos mysql, habilite LOAD DATA LOCAL especificando --local-infile[=1] opción, o deshabilitarlo con el --local-infile=0 opción. Para mysqlimport , la carga de archivos de datos locales está desactivada de forma predeterminada; habilítela con --local o la opción -L. En cualquier caso, el uso exitoso de una operación de carga local requiere que el servidor lo permita.

  • Si usa LOAD DATA LOCAL en scripts de Perl u otros programas que lean el grupo [client] desde archivos de opciones, puede agregar la opción local-infile=1 a ese grupo. Sin embargo, para evitar que esto cause problemas a los programas que no entiende local-infile, especifícalo usando el prefijo loose-:

    [client]
    loose-local-infile=1
    
  • Si LOAD DATA LOCAL está deshabilitado, ya sea en el servidor o en el cliente, un cliente que intenta emitir una declaración de este tipo recibe el siguiente mensaje de error:

    ERROR 1148: The used command is not allowed with this MySQL version

 31
Author: eggyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-29 18:50:05

La solución es modificar la línea de comandos mysql -e en el --local-infile=1 argumento como este:

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

Luego ejecute el comando LOAD DATA LOCAL INFILE de nuevo.

 47
Author: octopusgrabbus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-03 21:56:33

local-infile necesita habilitarse tanto en el servidor como en el cliente. Puede lograr esto agregando local-infile = 1 a la sección apropiada en el archivo my.cnf (Unix) o my.ini (Windows) de cada extremo. Por ejemplo, en el cliente:

[client]
local-infile = 1

También puede habilitar esto en tiempo de ejecución en el servidor configurando la variable de sistema local_infile:

SET GLOBAL local_infile=1;

Sin embargo, todavía necesita habilitarlo en el cliente. Puede hacer esto en tiempo de ejecución agregando un parámetro de línea de comandos a mysql orden:

mysql --local-infile=1 ...

Si utiliza Amazon Web Services RDS, puede configurar la configuración del servidor editando o creando un grupo de parámetros. Busque el parámetro local_infile. Es posible que tenga que reiniciar el servidor después de aplicar los cambios.

 8
Author: Zenexer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 04:19:38

Mi conjetura es que su servidor MySQL no tiene LOAD DATA LOCAL activado. Consulte esta sección de la documentación de MySQL:

Si LOAD DATA LOCAL está deshabilitado, ya sea en el servidor o en el cliente, un cliente que intente emitir dicha instrucción recibirá el siguiente mensaje de error:

ERROR 1148: El comando utilizado no está permitido con esta versión de MySQL

Aquí está el enlace a la página que conseguí esto de:

Http://dev.mysql.com/doc/refman/5.5/en/load-data-local.html

 0
Author: Mike Brant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-29 18:50:26